On Nov 15, 2003 at 17:53, Mihai RUSU <[EMAIL PROTECTED]> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Salut > > Citisem mai demult (si nu reusesc sa gasesc unde) ca atunci cand se > intoarce dintr-un system call, kernelul se uita la coada de socket "for > delivery" a procesului si apeleaza handlerele semnalelor respective. > > Ce ma intereseaza e sa stiu, doar atunci apeleaza handlerele ? Daca am > procesul in userspace nu mai primesc nici un semnal ? (pt mine ca > programator a primi un semnal e echivalent cu a mi se apela handlerul de > semnal :)).
Primesti cand esti scheduled urmatoarea data. Quanta curenta nu ti-o intrerupe, seteaza un flag ca ai primit SIG_xxx si data urmatoarea cand procesul tau se intoarce dintr-un syscall sau e scheduled din nou, il primeste. > > Deci pot fi intrerupt pt a mi se apela handlerele semnalelor ? Daca da > cand ? Practic oricand din punctul tau (procesului tau) de vedere (tu nu ai cum sa stii cand apare un context-switch si cand esti re-scheduled). Vezi ca sunt o gramada de libcall-uri care sunt unsafe de facut dintr-un signal handler tocmai din cauza asta (ca nu stii cand esti intrerupt). Printre ele malloc/free. > > Ma intereseaza in special pt linux (deci daca stiti ca variaza in functie > de versiunea de kernel specificati si versiunile), dar si pt *BSD si > Solaris. Nu stiu cand sunt delivered exact pe alte sisteme, dar chestia ca e unsafe sa chemi anumite functii dintr-un signal handler e valabila peste tot (cred ca de fapt asta te intereseaza pe tine). Andrei --- Detalii despre listele noastre de mail: http://www.lug.ro/
