From fabe2820c027b730e9a2bdb6d5e9f4e51574a470 Mon Sep 17 00:00:00 2001 From: mtm Date: Tue, 8 Jul 2003 09:58:23 +0000 Subject: 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. --- lib/libthr/thread/thr_init.c | 3 +++ lib/libthr/thread/thr_kern.c | 3 +++ lib/libthr/thread/thr_private.h | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'lib/libthr') 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 #include #include +#include #include #include @@ -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) -- cgit v1.1