From: chris mikkelson Date: Wed, 25 Mar 2009 05:14:39 +0000 (-0500) Subject: Moved signal event handlers to their own thread. They work now. X-Git-Url: https://git.mikk.net/?a=commitdiff_plain;h=dfb1bbb72f4b6b9670b063cd8a68e2744f363f9d;p=smtpsink Moved signal event handlers to their own thread. They work now. --- diff --git a/smtpsink.c b/smtpsink.c index b64ab24..c8bf590 100644 --- a/smtpsink.c +++ b/smtpsink.c @@ -19,6 +19,22 @@ sigev_exit(int fd, short event, void *arg) exit(0); } +static void * +sigloop(void *data) +{ + struct event_base *base = event_init(); + struct event sigterm, sigint; + + signal_set(&sigint, SIGINT, sigev_exit, 0); + event_base_set(base, &sigint); + signal_set(&sigterm, SIGTERM, sigev_exit, 0); + event_base_set(base, &sigint); + signal_add(&sigint, 0); + signal_add(&sigterm, 0); + event_base_dispatch(base); + return (void *)base; +} + int main(int argc, char **argv) { @@ -31,9 +47,9 @@ main(int argc, char **argv) uid_t uid = 0; gid_t gid = 0; - struct event sigint, sigterm; struct group *gr; struct passwd *pw; + pthread_t sl; int tstart = 1; @@ -64,10 +80,8 @@ main(int argc, char **argv) signal(SIGPIPE,SIG_IGN); event_init(); - signal_set(&sigint, SIGINT, sigev_exit, 0); - signal_set(&sigterm, SIGTERM, sigev_exit, 0); - signal_add(&sigint, 0); - signal_add(&sigterm, 0); + + pthread_create(&sl, 0, sigloop, 0); conn_pool_init(concurrency); io_init();