summaryrefslogtreecommitdiffstats
path: root/lib/libpthread/thread/thr_kern.c
diff options
context:
space:
mode:
authormini <mini@FreeBSD.org>2003-02-17 10:05:18 +0000
committermini <mini@FreeBSD.org>2003-02-17 10:05:18 +0000
commitf410bbff9bdafda36fadec4dfcd193618bf28eaf (patch)
treec24155922d6dce25dde63eab941dbc318206ebdf /lib/libpthread/thread/thr_kern.c
parent6ebeaa8ec8a84c0fe2ebf0392ae3386ba9840a81 (diff)
downloadFreeBSD-src-f410bbff9bdafda36fadec4dfcd193618bf28eaf.zip
FreeBSD-src-f410bbff9bdafda36fadec4dfcd193618bf28eaf.tar.gz
Deliver signals posted via an upcall to the appropriate thread.
Diffstat (limited to 'lib/libpthread/thread/thr_kern.c')
-rw-r--r--lib/libpthread/thread/thr_kern.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/libpthread/thread/thr_kern.c b/lib/libpthread/thread/thr_kern.c
index 0747cff..c14d44a 100644
--- a/lib/libpthread/thread/thr_kern.c
+++ b/lib/libpthread/thread/thr_kern.c
@@ -248,6 +248,8 @@ _thread_kern_scheduler(struct kse_mailbox *km)
pthread_t td, pthread, pthread_h;
unsigned int current_tick;
struct kse_thr_mailbox *tm, *p;
+ sigset_t sigset;
+ int i;
DBG_MSG("entering\n");
while (!TAILQ_EMPTY(&_thread_list)) {
@@ -280,8 +282,13 @@ _thread_kern_scheduler(struct kse_mailbox *km)
}
/* Deliver posted signals. */
- /* XXX: Not yet. */
DBG_MSG("Picking up signals\n");
+ bcopy(&km->km_sigscaught, &sigset, sizeof(sigset_t));
+ sigemptyset(&km->km_sigscaught); /* XXX */
+ if (SIGNOTEMPTY(sigset))
+ for (i = 1; i < NSIG; i++)
+ if (sigismember(&sigset, i) != 0)
+ _thread_sig_dispatch(i);
if (_spinblock_count != 0) {
/*
OpenPOWER on IntegriCloud