diff options
author | mtm <mtm@FreeBSD.org> | 2004-03-27 15:05:28 +0000 |
---|---|---|
committer | mtm <mtm@FreeBSD.org> | 2004-03-27 15:05:28 +0000 |
commit | 1368ee7bbe8fe12cc3198ba6d3b60c72aba57b4c (patch) | |
tree | 59962a1a1997ce2f27f3837a246291555fd466ff | |
parent | 9481d0539ded5c181074110b4561003edab1a015 (diff) | |
download | FreeBSD-src-1368ee7bbe8fe12cc3198ba6d3b60c72aba57b4c.zip FreeBSD-src-1368ee7bbe8fe12cc3198ba6d3b60c72aba57b4c.tar.gz |
o Since we're not using signals for thread synchronization anymore,
sigprocmask no longer needs to be wrapped.
o raise(3) is applied to the calling thread in a threaded program.
o In the sigaction wrapper reference the correct structure.
o Don't treat SIGTHR especially anymore (infact it won't exist in
a little while).
-rw-r--r-- | lib/libthr/thread/thr_sig.c | 30 | ||||
-rw-r--r-- | lib/libthr/thread/thr_syscalls.c | 21 |
2 files changed, 17 insertions, 34 deletions
diff --git a/lib/libthr/thread/thr_sig.c b/lib/libthr/thread/thr_sig.c index 771afbc..0f7d173 100644 --- a/lib/libthr/thread/thr_sig.c +++ b/lib/libthr/thread/thr_sig.c @@ -47,36 +47,6 @@ #define DBG_MSG(x...) #endif -__weak_reference(_sigprocmask, sigprocmask); - -int -_sigprocmask(int how, const sigset_t *set, sigset_t *oset) -{ - sigset_t new; - - /* - * Make sure applications can't unblock our synchronization - * signal. We always want to take this with sigwait(). - */ - if (set != NULL) { - new = *set; - switch (how) { - case SIG_BLOCK: - case SIG_SETMASK: - SIGADDSET(new, SIGTHR); - break; - case SIG_UNBLOCK: - SIGDELSET(new, SIGTHR); - break; - default: - break; - } - set = &new; - } - - return (__sys_sigprocmask(how, set, oset)); -} - __weak_reference(_pthread_sigmask, pthread_sigmask); int diff --git a/lib/libthr/thread/thr_syscalls.c b/lib/libthr/thread/thr_syscalls.c index badd7cb..2d83ab5 100644 --- a/lib/libthr/thread/thr_syscalls.c +++ b/lib/libthr/thread/thr_syscalls.c @@ -272,6 +272,21 @@ pselect(int count, fd_set *rfds, fd_set *wfds, fd_set *efds, return (ret); } +__weak_reference(_raise, raise); + +int +_raise(int sig) +{ + int error; + + error = pthread_kill(pthread_self(), sig); + if (error != 0) { + errno = error; + error = -1; + } + return (error); +} + __weak_reference(_read, read); ssize_t @@ -324,13 +339,11 @@ _sigaction(int sig, const struct sigaction *act, struct sigaction *oact) struct sigaction oldact, wrapperact; int error; - /* Detect invalid signals. Signal SIGTHR is silently ignored */ + /* Detect invalid signals. */ if (sig < 1 || sig > NSIG) { errno = EINVAL; return (-1); } - if (sig == SIGTHR) - return (0); /* * If act is not NULL the library's signal wrapper is passed into the @@ -348,7 +361,7 @@ _sigaction(int sig, const struct sigaction *act, struct sigaction *oact) tmpact->sa_handler != SIG_IGN) { bcopy((const void *)tmpact, (void *)&wrapperact, sizeof(struct sigaction)); - tmpact->sa_flags &= SA_SIGINFO; + wrapperact.sa_flags |= SA_SIGINFO; wrapperact.sa_sigaction = &_thread_sig_wrapper; tmpact = &wrapperact; } |