summaryrefslogtreecommitdiffstats
path: root/lib/libthr
diff options
context:
space:
mode:
authormtm <mtm@FreeBSD.org>2003-07-08 09:58:23 +0000
committermtm <mtm@FreeBSD.org>2003-07-08 09:58:23 +0000
commitfabe2820c027b730e9a2bdb6d5e9f4e51574a470 (patch)
tree0db0159177bc3431faaebf30c10dae49c467160c /lib/libthr
parent8efa9fd6782501b035dd192b83b788587d4a1a5f (diff)
downloadFreeBSD-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.c3
-rw-r--r--lib/libthr/thread/thr_kern.c3
-rw-r--r--lib/libthr/thread/thr_private.h15
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)
OpenPOWER on IntegriCloud