diff options
-rw-r--r-- | cmogstored.c | 2 | ||||
-rw-r--r-- | selfwake.h | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/cmogstored.c b/cmogstored.c index 31bdd85..6aaeb92 100644 --- a/cmogstored.c +++ b/cmogstored.c @@ -418,6 +418,7 @@ static void fork_worker(unsigned worker_id) if (pid > 0) { mog_process_register(pid, worker_id); } else if (pid == 0) { + mog_selfwake_put(master_selfwake); mog_process_reset(); mog_svc_each(mog_svc_atfork_child, &parent); @@ -501,6 +502,7 @@ static void run_master(void) if (do_exit) running = mog_kill_each_worker(SIGQUIT); } + mog_selfwake_put(master_selfwake); } int main(int argc, char *argv[], char *envp[]) @@ -23,6 +23,7 @@ struct mog_selfpipe { struct mog_fd * mog_selfwake_new(void); void mog_selfwake_trigger(struct mog_fd *); void mog_selfwake_drain(struct mog_fd *); +#define mog_selfwake_put(mfd) mog_fd_put((mfd)) static inline void mog_selfwake_interrupt(void) {} void mog_selfwake_wait(struct mog_fd *); #else /* use Linux-only facilities like epoll_pwait or ppoll */ @@ -33,6 +34,7 @@ static inline void mog_selfwake_wait(struct mog_fd *mfd) static inline struct mog_fd * mog_selfwake_new(void) { return NULL; } static inline void mog_selfwake_trigger(struct mog_fd *mfd) {} static inline void mog_selfwake_drain(struct mog_fd *mfd) {} +static inline void mog_selfwake_put(struct mog_fd *mfd) {} static inline void mog_selfwake_interrupt(void) { CHECK(int, 0, kill(getpid(), SIGURG)); |