[so2] [Tema 1] Test 10 - Handler-ul probei up apelat la infinit

Adrian Stanciu adrian.stanciu.pub at gmail.com
Mon Mar 20 18:14:29 EET 2017


2017-03-20 15:41 GMT+02:00 Gabriel Ivașcu via so2 <so2 at cursuri.cs.pub.ro>:
> 2017-03-20 0:41 GMT+02:00 Gabriel Ivașcu <ivascu.gabriel59 at gmail.com>:
>> Care ar putea fi o posibilă cauză pentru care handler-ul probei ce
>> interceptează apelul up este apelat de o infinitate de ori *doar* în
>> cadrul testului 10?
>>
>> După cunoștințele mele, un astfel de comportament se obține atunci
>> când handler-ul probei apelează funcția căreia îi este asociată proba.
>> Totuși, nu folosesc nici un semafor în codul meu.
>
> Cel mai probabil printk apelează în spate up pe vreun semafor
> (mulțumesc lui Darius Mihai pentru hint) și de aceea intra în
> recursivitate infinită, pentru că odată ce am scos printk-ul din
> handler, totul a mers OK.

Mă bucur că ați descoperit problema.

Un apel printk() are nevoie de acces exclusiv la consolă și pentru
asta folosește un semafor [1][2][3].

> Totuși, curios faptul că acest lucru se întâmpla doar în cadrul testului 10.

Ultimul test este un stress test, cu un număr mai mare de apeluri fată
de celelalte teste.

[1] http://lxr.free-electrons.com/source/kernel/printk/printk.c#L73
[2] http://lxr.free-electrons.com/source/kernel/printk/printk.c#L1791
[3] http://lxr.free-electrons.com/source/kernel/printk/printk.c#L2106


Adrian


More information about the so2 mailing list