[so2] [Linux][Tema1] Sincronizare interceptor

Alexandru Juncu alexj at rosedu.org
Tue Mar 12 21:36:01 EET 2013


2013/3/12 Mihail Costea <mihail.costea90 at gmail.com>:
> 2013/3/12 Alexandru Juncu <alexj at rosedu.org>:
>> 2013/3/12 Mihail Costea <mihail.costea90 at gmail.com>:
>>> Fie urmatorul caz de utilizare:
>>>
>>> Un syscall este interceptat de catre modulul nostru.
>>>
>>> La un moment dat o functie apeleaza acest syscall, dar fix inainte de
>>> a obtine pointer-ul la functia syscall-ului original primim
>>> deinterceptarea
>>> acestui syscall.
>>> Cum tratam acest caz? Pur si simplu rulam sycall-ul original in
>>> continuare sau returnam o eroare?
>>>
>>
>> Cred că ar trebui să ai un lock pe tabelă în momentul acela.  Adică
>> cât faci operațiuni de modificare a unui apel de sistem ar trebui să
>> te asiguri că nu sunt folosite informatiile ce se modifică.
>> _______________________________________________
>> http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii
>
> Am asta, ma gandeam ce ar fi sa se intample daca interceptorul e
> preemptat inainte de a obtine lock-ul (adica intra in functie dar nu
> ia lock-ul) si in locul lui vine apelul de deinterceptare si astfel se
> elimina anumite date despre apelul de sistem care ar trebui pentru
> rularea in interceptor.

Prin interceptor te referi la funcția hander pentru un apel
interceptat care înlocuiește handerul original și care apelează la
rândul ei handlerul original, da? (just to be on the same page)

OK, să zicem că avem cazul tău. Intră în funcție dar încă nu ia
lock-ul pentru lista de pid-uri interceptate. Între timp vine cererea
de deinterceptare și pid-ul/apelul este scos din listă. Revine înapoi
rândul funcției interceptor care continuă rularea. Interceptorul ia
lock-ul și parcurge lista (sigur altcineva nu va modifica lista pentru
că e locked). Caută pid în listă și nu îl va găsi, prin urmare va ieși
fără să mai facă nimic. Iese din functie după ce a cedat lock-ul și
viața merge mai departe :P Da, am făcut o căutare inutilă, dar nu s-a
blocat nimic.


More information about the so2 mailing list