diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-06-21 03:34:24 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-06-25 21:33:51 +0000 |
commit | ba8a3673a6ada7122c89e420455901b6b1288500 (patch) | |
tree | 914e83d386d434a016b067a55a6fedab75ff5ae4 | |
parent | df50c675f127c876e8d74be522ddc858aa3795ef (diff) | |
download | cmogstored-ba8a3673a6ada7122c89e420455901b6b1288500.tar.gz |
This should hopefully save a few cycles and reduce stack usage slightly.
-rw-r--r-- | cmogstored.h | 1 | ||||
-rw-r--r-- | queue_epoll.c | 4 | ||||
-rw-r--r-- | sig.c | 23 |
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); } @@ -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); } |