reentrantnost libc
Dan Lukes
dan at obluda.cz
Tue Jul 13 20:01:40 CEST 2004
Radim Kolar napsal/wrote:
> Mam problem s reentrantnosti libc. Mam single threaded aplikaci, ktera kdyz
> dostane signal v dobe kdy je prave v nektere libc funkci napr. free() a zavola
> tutez funkci v signal handleru, tak se aplikace abortne() s hlaskou recursive
> call. Potreboval bych vedet jak tuto situaci resit.
man sigaction
Hledej "NOTE", a tam od druheho odstavce pocinaje.
> V pripade ze ne, jak zjistim zda je prave nejaka funkce vykonavana.
U tech funkci, ktere jsou "bezpecne" to zjistit nepotrebujes, odstatni
stejne nemuzes pouzit - nektere funkce mohou byt nereentrantni nejen
vzhledem "sama k sobe", ale i k uplne jinym funkcnim. Ne-bezpecne funkce
proste a jednoduse nemuzes pouzivat.
> Zajimalo by mne zda pouziti multi
> threaded knihovny libc_r tento problem vyresi.
IMHO ne.
> Protoze pokud pracuje
> libc_r tak, ze pri vlezeni do malloc si nastavi semafor a pri dalsim
> volani malloc ceka az bude semafor uvolnen, tak to fungovat nebude protoze
> hlavni program je v te dobe stopnut.
Ano, nastane deadlock. "malloc" take neni na seznamu "povolenych"
funkci ...
Musis si v signalovych handlerech vystacit pouze s povolenymi funkcemi.
Vetsinou to neni zas takovy problem.
Mimochodem, tohle omezeni neni nijaka zadna zvlastni
FreeBSD-specialita. Tak to chodi na vetsine UNIX-like systemu. Cimz
chci, m.j., rict, ze i s timto omezenim lze napsat velka softwarova dila
... ;-)
Dan
--
Dan Lukes tel: +420 2 21914205, fax: +420 2 21914206
root of FIONet, KolejNET, webmaster of www.freebsd.cz
AKA: dan at obluda.cz, dan at freebsd.cz, dan at kolej.mff.cuni.cz
More information about the Users-l
mailing list