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