diff options
author | davidxu <davidxu@FreeBSD.org> | 2003-11-09 00:37:14 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2003-11-09 00:37:14 +0000 |
commit | 27be0315267acb1830e3342fdd24e2477a9f2a66 (patch) | |
tree | 5fa3a90a89eabef794b2689910cc9b0a43f8d3c1 /lib/libpthread | |
parent | 19f44f7c2692adad501404842ca1772ff704c90c (diff) | |
download | FreeBSD-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.c | 2 |
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); |