mehr zu deadlocks (was: linux-l: fork() problem mit omniorb)

Steffen Dettmer steffen at dett.de
Sa Nov 25 15:23:30 CET 2000


* Jan-Benedict Glaw wrote on Sat, Nov 25, 2000 at 02:25 +0100:
> ...und dann darf man doch nicht mehr fork()en, sondern nur noch 

Wenn wir schon mal beim Deadlock Thema sind:
Angenommen, ein Process schreibt logfiles. Jede Zeile enthält ein
Datum (wie syslog). Ergo wird bei jedem Eintrag time()
aufgerufen.
Weiterhin hat der Process einen signal handler. Dieser schreibt
unter Umständen was ins logfile. Dazu ruft er time() auf.

time() macht irgentein thread locking. Kommt in dem Moment des
Aufrufes von time() an der richtigen (besser: falschen ;)) Stelle
ein Signal, wird der signal handler gestartet. Wenn dieser jetzt
was loggen möchte/muß, gibt's ein Deadlock (da thread lock
blockt).

Ja, ja, ich weiß, eigentlich sollte ein signal handler primitiv
und simpel sein und keine lib funcs aufrufen usw. Hat jemand aber
dennoch ne Idee, wie man das lösen könnte? Bekommt eine Funktion
z.B. raus, ob die von einem signal handler gerufen wurde (man
könnte notfalls ganz brutal ne globale variable machen, oder?).

Bessere Ideen?

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l