diff options
author | Madhusudan Mathihalli <madhum@apache.org> | 2004-04-21 01:01:28 +0000 |
---|---|---|
committer | Madhusudan Mathihalli <madhum@apache.org> | 2004-04-21 01:01:28 +0000 |
commit | d9ccc98e9aca7e1400f1f4d5fd6a9df179280450 (patch) | |
tree | dc7f48a62bcd34387c4812b8497b9ca4bfec034e /threadproc/unix/signals.c | |
parent | 6647ce7e826d4f395fdb3cd3a19bc79e3f02b826 (diff) | |
download | apr-d9ccc98e9aca7e1400f1f4d5fd6a9df179280450.tar.gz |
Added two new functions apr_signal_block and apr_signal_unblock to
block/unblock only certain signals.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@65071 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'threadproc/unix/signals.c')
-rw-r--r-- | threadproc/unix/signals.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/threadproc/unix/signals.c b/threadproc/unix/signals.c index ae87a861b..9b0174cdd 100644 --- a/threadproc/unix/signals.c +++ b/threadproc/unix/signals.c @@ -423,4 +423,50 @@ APR_DECLARE(apr_status_t) apr_setup_signal_thread(void) return rv; } +APR_DECLARE(apr_status_t) apr_signal_block(int signum) +{ + sigset_t sig_mask; + int rv; + + sigemptyset(&sig_mask); + + sigaddset(&sig_mask, signum); + +#if defined(SIGPROCMASK_SETS_THREAD_MASK) + if ((rv = sigprocmask(SIG_BLOCK, &sig_mask, NULL)) != 0) { + rv = errno; + } +#else + if ((rv = pthread_sigmask(SIG_BLOCK, &sig_mask, NULL)) != 0) { +#ifdef PTHREAD_SETS_ERRNO + rv = errno; +#endif + } +#endif + return rv; +} + +APR_DECLARE(apr_status_t) apr_signal_unblock(int signum) +{ + sigset_t sig_mask; + int rv; + + sigemptyset(&sig_mask); + + sigaddset(&sig_mask, signum); + +#if defined(SIGPROCMASK_SETS_THREAD_MASK) + if ((rv = sigprocmask(SIG_UNBLOCK, &sig_mask, NULL)) != 0) { + rv = errno; + } +#else + if ((rv = pthread_sigmask(SIG_UNBLOCK, &sig_mask, NULL)) != 0) { +#ifdef PTHREAD_SETS_ERRNO + rv = errno; +#endif + } +#endif + return rv; +} + #endif |