summaryrefslogtreecommitdiffstats
path: root/lib/libpthread
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2003-11-09 00:37:14 +0000
committerdavidxu <davidxu@FreeBSD.org>2003-11-09 00:37:14 +0000
commit27be0315267acb1830e3342fdd24e2477a9f2a66 (patch)
tree5fa3a90a89eabef794b2689910cc9b0a43f8d3c1 /lib/libpthread
parent19f44f7c2692adad501404842ca1772ff704c90c (diff)
downloadFreeBSD-src-27be0315267acb1830e3342fdd24e2477a9f2a66.zip
FreeBSD-src-27be0315267acb1830e3342fdd24e2477a9f2a66.tar.gz
If a thread in critical region got a synchronous signal, according current
signal handling mode, there is no chance to handle the signal, something must be wrong in the library, just call kse_thr_interrupt to dump its core. I have the code for a long time, but forgot to commit it.
Diffstat (limited to 'lib/libpthread')
-rw-r--r--lib/libpthread/thread/thr_kern.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/libpthread/thread/thr_kern.c b/lib/libpthread/thread/thr_kern.c
index 7909838..5186c52 100644
--- a/lib/libpthread/thread/thr_kern.c
+++ b/lib/libpthread/thread/thr_kern.c
@@ -1568,6 +1568,8 @@ kse_check_completed(struct kse *kse)
!= 0) {
if (SIGISMEMBER(thread->sigmask, sig))
SIGADDSET(thread->sigpend, sig);
+ else if (THR_IN_CRITICAL(thread))
+ kse_thr_interrupt(NULL, KSE_INTR_SIGEXIT, sig);
else
(void)_thr_sig_add(thread, sig,
&thread->tcb->tcb_tmbx.tm_syncsig);
OpenPOWER on IntegriCloud