]> git.mikk.net Git - smtpsink/commitdiff
Moved signal event handlers to their own thread. They work now.
authorchris mikkelson <chris@mikk.net>
Wed, 25 Mar 2009 05:14:39 +0000 (00:14 -0500)
committerchris mikkelson <chris@mikk.net>
Wed, 25 Mar 2009 05:14:39 +0000 (00:14 -0500)
smtpsink.c

index b64ab2411eb5bf3b8983fa9407ced9ed40f4ae51..c8bf590f1b7fb29f6aa78f58cd0418ae66dd8f77 100644 (file)
@@ -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();