about summary refs log tree commit homepage
path: root/sig.c
diff options
context:
space:
mode:
Diffstat (limited to 'sig.c')
-rw-r--r--sig.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/sig.c b/sig.c
index 28f5017..f0feb32 100644
--- a/sig.c
+++ b/sig.c
@@ -8,20 +8,23 @@
  * we block signals in pool threads, only the main thread receives signals
  */
 
-void mog_intr_disable(void)
+static sigset_t fullset;
+sigset_t mog_emptyset;
+
+__attribute__((constructor)) void sig_init(void)
 {
-        sigset_t set;
+        CHECK(int, 0, sigfillset(&fullset));
+        CHECK(int, 0, sigemptyset(&mog_emptyset));
+}
 
-        CHECK(int, 0, sigfillset(&set));
-        CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &set, NULL));
+void mog_intr_disable(void)
+{
+        CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &fullset, NULL));
 }
 
 void mog_intr_enable(void)
 {
-        sigset_t set;
-
-        CHECK(int, 0, sigemptyset(&set));
-        CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &set, NULL));
+        CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &mog_emptyset, NULL));
 }
 
 /*
@@ -47,7 +50,6 @@ static void sleeper(struct timespec *tsp, const sigset_t *sigmask)
 /* thread-safe, interruptible sleep, negative seconds -> sleep forever */
 void mog_sleep(long seconds)
 {
-        sigset_t set;
         struct timespec ts;
         struct timespec *tsp;
 
@@ -59,6 +61,5 @@ void mog_sleep(long seconds)
                 tsp = &ts;
         }
 
-        CHECK(int, 0, sigemptyset(&set));
-        sleeper(tsp, &set);
+        sleeper(tsp, &mog_emptyset);
 }