summaryrefslogtreecommitdiff
path: root/threadproc/unix/signals.c
diff options
context:
space:
mode:
authorMadhusudan Mathihalli <madhum@apache.org>2004-04-21 01:01:28 +0000
committerMadhusudan Mathihalli <madhum@apache.org>2004-04-21 01:01:28 +0000
commitd9ccc98e9aca7e1400f1f4d5fd6a9df179280450 (patch)
treedc7f48a62bcd34387c4812b8497b9ca4bfec034e /threadproc/unix/signals.c
parent6647ce7e826d4f395fdb3cd3a19bc79e3f02b826 (diff)
downloadapr-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.c46
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