summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjb <jb@FreeBSD.org>1998-08-26 20:50:42 +0000
committerjb <jb@FreeBSD.org>1998-08-26 20:50:42 +0000
commit45be607d945adc5acb55189112419308142cc122 (patch)
tree961ab9352c39ebc54b8dc4fc42a6b90000ce912b
parent089ead75268cfd633a1859676028285c7e46b41b (diff)
downloadFreeBSD-src-45be607d945adc5acb55189112419308142cc122.zip
FreeBSD-src-45be607d945adc5acb55189112419308142cc122.tar.gz
Back out most of the last commit. It created problems with sigpause.
-rw-r--r--lib/libc_r/uthread/uthread_sig.c27
-rw-r--r--lib/libkse/thread/thr_sig.c27
-rw-r--r--lib/libpthread/thread/thr_sig.c27
3 files changed, 3 insertions, 78 deletions
diff --git a/lib/libc_r/uthread/uthread_sig.c b/lib/libc_r/uthread/uthread_sig.c
index 073b1ba..be3da9a 100644
--- a/lib/libc_r/uthread/uthread_sig.c
+++ b/lib/libc_r/uthread/uthread_sig.c
@@ -212,31 +212,6 @@ _thread_sig_handler(int sig, int code, struct sigcontext * scp)
sigdelset(&pthread->sigpend,SIGCONT);
}
- /*
- * Enter a loop to process each thread in the linked
- * list that is sigwait-ing on a signal. Since POSIX
- * doesn't specify which thread will get the signal
- * if there are multiple waiters, we'll give it to the
- * first one we find.
- */
- for (pthread = _thread_link_list; pthread != NULL;
- pthread = pthread->nxt) {
- if ((pthread->state == PS_SIGWAIT) &&
- sigismember(&pthread->sigmask, sig)) {
- /* Change the state of the thread to run: */
- PTHREAD_NEW_STATE(pthread,PS_RUNNING);
-
- /* Return the signal number: */
- pthread->signo = sig;
-
- /*
- * Do not attempt to deliver this signal
- * to other threads.
- */
- return;
- }
- }
-
/* Check if the signal is not being ignored: */
if (_thread_sigact[sig - 1].sa_handler != SIG_IGN)
/*
@@ -284,7 +259,6 @@ _thread_signal(pthread_t pthread, int sig)
case PS_RUNNING:
case PS_STATE_MAX:
case PS_SIGTHREAD:
- case PS_SIGWAIT:
case PS_SUSPENDED:
/* Nothing to do here. */
break;
@@ -317,6 +291,7 @@ _thread_signal(pthread_t pthread, int sig)
case PS_FDW_WAIT:
case PS_SLEEP_WAIT:
case PS_SELECT_WAIT:
+ case PS_SIGWAIT:
if (sig != SIGCHLD ||
_thread_sigact[sig - 1].sa_handler != SIG_DFL) {
/* Flag the operation as interrupted: */
diff --git a/lib/libkse/thread/thr_sig.c b/lib/libkse/thread/thr_sig.c
index 073b1ba..be3da9a 100644
--- a/lib/libkse/thread/thr_sig.c
+++ b/lib/libkse/thread/thr_sig.c
@@ -212,31 +212,6 @@ _thread_sig_handler(int sig, int code, struct sigcontext * scp)
sigdelset(&pthread->sigpend,SIGCONT);
}
- /*
- * Enter a loop to process each thread in the linked
- * list that is sigwait-ing on a signal. Since POSIX
- * doesn't specify which thread will get the signal
- * if there are multiple waiters, we'll give it to the
- * first one we find.
- */
- for (pthread = _thread_link_list; pthread != NULL;
- pthread = pthread->nxt) {
- if ((pthread->state == PS_SIGWAIT) &&
- sigismember(&pthread->sigmask, sig)) {
- /* Change the state of the thread to run: */
- PTHREAD_NEW_STATE(pthread,PS_RUNNING);
-
- /* Return the signal number: */
- pthread->signo = sig;
-
- /*
- * Do not attempt to deliver this signal
- * to other threads.
- */
- return;
- }
- }
-
/* Check if the signal is not being ignored: */
if (_thread_sigact[sig - 1].sa_handler != SIG_IGN)
/*
@@ -284,7 +259,6 @@ _thread_signal(pthread_t pthread, int sig)
case PS_RUNNING:
case PS_STATE_MAX:
case PS_SIGTHREAD:
- case PS_SIGWAIT:
case PS_SUSPENDED:
/* Nothing to do here. */
break;
@@ -317,6 +291,7 @@ _thread_signal(pthread_t pthread, int sig)
case PS_FDW_WAIT:
case PS_SLEEP_WAIT:
case PS_SELECT_WAIT:
+ case PS_SIGWAIT:
if (sig != SIGCHLD ||
_thread_sigact[sig - 1].sa_handler != SIG_DFL) {
/* Flag the operation as interrupted: */
diff --git a/lib/libpthread/thread/thr_sig.c b/lib/libpthread/thread/thr_sig.c
index 073b1ba..be3da9a 100644
--- a/lib/libpthread/thread/thr_sig.c
+++ b/lib/libpthread/thread/thr_sig.c
@@ -212,31 +212,6 @@ _thread_sig_handler(int sig, int code, struct sigcontext * scp)
sigdelset(&pthread->sigpend,SIGCONT);
}
- /*
- * Enter a loop to process each thread in the linked
- * list that is sigwait-ing on a signal. Since POSIX
- * doesn't specify which thread will get the signal
- * if there are multiple waiters, we'll give it to the
- * first one we find.
- */
- for (pthread = _thread_link_list; pthread != NULL;
- pthread = pthread->nxt) {
- if ((pthread->state == PS_SIGWAIT) &&
- sigismember(&pthread->sigmask, sig)) {
- /* Change the state of the thread to run: */
- PTHREAD_NEW_STATE(pthread,PS_RUNNING);
-
- /* Return the signal number: */
- pthread->signo = sig;
-
- /*
- * Do not attempt to deliver this signal
- * to other threads.
- */
- return;
- }
- }
-
/* Check if the signal is not being ignored: */
if (_thread_sigact[sig - 1].sa_handler != SIG_IGN)
/*
@@ -284,7 +259,6 @@ _thread_signal(pthread_t pthread, int sig)
case PS_RUNNING:
case PS_STATE_MAX:
case PS_SIGTHREAD:
- case PS_SIGWAIT:
case PS_SUSPENDED:
/* Nothing to do here. */
break;
@@ -317,6 +291,7 @@ _thread_signal(pthread_t pthread, int sig)
case PS_FDW_WAIT:
case PS_SLEEP_WAIT:
case PS_SELECT_WAIT:
+ case PS_SIGWAIT:
if (sig != SIGCHLD ||
_thread_sigact[sig - 1].sa_handler != SIG_DFL) {
/* Flag the operation as interrupted: */
OpenPOWER on IntegriCloud