From dfb1bbb72f4b6b9670b063cd8a68e2744f363f9d Mon Sep 17 00:00:00 2001 From: chris mikkelson Date: Wed, 25 Mar 2009 00:14:39 -0500 Subject: [PATCH] Moved signal event handlers to their own thread. They work now. --- smtpsink.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) 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(); -- 2.50.1