]> mj.ucw.cz Git - libucw.git/commit
Fixed thread safety of signal handling.
authorMartin Mares <mj@ucw.cz>
Mon, 11 Dec 2006 22:45:56 +0000 (23:45 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 11 Dec 2006 22:45:56 +0000 (23:45 +0100)
commitc53cd79e6883d247d077f25cee72a5e608ae4b5d
treebe6983de5d393ce390f1818560d343666b0cbfb6
parent6f0e4304d572ac09475e25327b01a8ac326bf6d8
Fixed thread safety of signal handling.

Signals delivery is generally not deterministic in multi-threaded programs,
but SIGSEGV is always sent by the kernel to the thread which caused the fault.

Replaced the global signal handler array by a pointer in the per-thread
context and replaced saving of original handles (which was wrong even in
some non-threaded cases) by locked use counters.

Also moved logging of the SIGSEGV error message out of the signal handler
to be sure there are no clashes.

When libucw is compiled without threading, everything is nearly as simple
as before, because the thread context struct is static and all locks
disappear.
lib/lib.h
lib/lizard-safe.c
lib/sighandler.c