about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-06-21 03:34:24 +0000
committerEric Wong <normalperson@yhbt.net>2013-06-25 21:33:51 +0000
commitba8a3673a6ada7122c89e420455901b6b1288500 (patch)
tree914e83d386d434a016b067a55a6fedab75ff5ae4
parentdf50c675f127c876e8d74be522ddc858aa3795ef (diff)
downloadcmogstored-ba8a3673a6ada7122c89e420455901b6b1288500.tar.gz
This should hopefully save a few cycles and reduce stack
usage slightly.
-rw-r--r--cmogstored.h1
-rw-r--r--queue_epoll.c4
-rw-r--r--sig.c23
3 files changed, 14 insertions, 14 deletions
diff --git a/cmogstored.h b/cmogstored.h
index a92b0cc..50796b2 100644
--- a/cmogstored.h
+++ b/cmogstored.h
@@ -258,6 +258,7 @@ struct mog_file {
 #include "notify.h"
 
 /* sig.c */
+extern sigset_t mog_emptyset;
 void mog_intr_disable(void);
 void mog_intr_enable(void);
 void mog_sleep(long seconds);
diff --git a/queue_epoll.c b/queue_epoll.c
index e2e8222..fe88593 100644
--- a/queue_epoll.c
+++ b/queue_epoll.c
@@ -146,10 +146,8 @@ struct mog_fd * mog_idleq_wait_intr(struct mog_queue *q, int timeout)
 {
         int rc;
         struct epoll_event event;
-        sigset_t set;
 
-        CHECK(int, 0, sigemptyset(&set));
-        rc = epoll_pwait(q->queue_fd, &event, 1, timeout, &set);
+        rc = epoll_pwait(q->queue_fd, &event, 1, timeout, &mog_emptyset);
         return epoll_event_check(rc, &event);
 }
 
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);
 }