diff options
author | mtm <mtm@FreeBSD.org> | 2003-07-08 09:58:23 +0000 |
---|---|---|
committer | mtm <mtm@FreeBSD.org> | 2003-07-08 09:58:23 +0000 |
commit | fabe2820c027b730e9a2bdb6d5e9f4e51574a470 (patch) | |
tree | 0db0159177bc3431faaebf30c10dae49c467160c /lib/libthr | |
parent | 8efa9fd6782501b035dd192b83b788587d4a1a5f (diff) | |
download | FreeBSD-src-fabe2820c027b730e9a2bdb6d5e9f4e51574a470.zip FreeBSD-src-fabe2820c027b730e9a2bdb6d5e9f4e51574a470.tar.gz |
When _PTHREADSINVARIANTS is defined SIGABRT is not included
in the set of signals to block.
Also, make the PANIC macro call abort() instead of simply
exiting.
Diffstat (limited to 'lib/libthr')
-rw-r--r-- | lib/libthr/thread/thr_init.c | 3 | ||||
-rw-r--r-- | lib/libthr/thread/thr_kern.c | 3 | ||||
-rw-r--r-- | lib/libthr/thread/thr_private.h | 15 |
3 files changed, 19 insertions, 2 deletions
diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c index 671bd6f..86622b6 100644 --- a/lib/libthr/thread/thr_init.c +++ b/lib/libthr/thread/thr_init.c @@ -349,6 +349,9 @@ _thread_init(void) SIGEMPTYSET(_thread_suspend_sigset); SIGADDSET(_thread_suspend_sigset, SIGTHR); } +#ifdef _PTHREADS_INVARIANTS + SIGADDSET(_thread_suspend_sigset, SIGALRM); +#endif /* Get the kernel clockrate: */ mib[0] = CTL_KERN; diff --git a/lib/libthr/thread/thr_kern.c b/lib/libthr/thread/thr_kern.c index b3dae7d..f99547e 100644 --- a/lib/libthr/thread/thr_kern.c +++ b/lib/libthr/thread/thr_kern.c @@ -77,6 +77,9 @@ _thread_sigblock() */ SIGFILLSET(set); SIGADDSET(set, SIGTHR); +#ifdef _PTHREADS_INVARIANTS + SIGDELSET(set, SIGABRT); +#endif /* If we have already blocked signals, just up the refcount */ if (++curthread->signest > 1) diff --git a/lib/libthr/thread/thr_private.h b/lib/libthr/thread/thr_private.h index 3260c9b..c1e8b0a 100644 --- a/lib/libthr/thread/thr_private.h +++ b/lib/libthr/thread/thr_private.h @@ -60,6 +60,7 @@ #include <spinlock.h> #include <stdio.h> #include <ucontext.h> +#include <unistd.h> #include <machine/atomic.h> #include <sys/thr.h> @@ -68,8 +69,18 @@ /* * Kernel fatal error handler macro. */ -#define PANIC(string) _thread_exit(__FILE__,__LINE__,string) - +#ifndef _PTHREADS_INVARIANTS +#define PANIC(string) _thread_exit(__FILE__, __LINE__, (string)) +#else /* _PTHREADS_INVARIANTS */ +#define PANIC(string) \ + do { \ + _thread_printf(STDOUT_FILENO, (string)); \ + _thread_printf(STDOUT_FILENO, \ + "\nAbnormal termination, file: %s, line: %d\n", \ + __FILE__, __LINE__); \ + abort(); \ + } while (0) +#endif /* !_PTHREADS_INVARIANTS */ /* Output debug messages like this: */ #define stdout_debug(args...) _thread_printf(STDOUT_FILENO, args) |