From: chris mikkelson Date: Fri, 27 Mar 2009 03:20:03 +0000 (-0500) Subject: Daemonization now works, and is the default. Creating threads X-Git-Url: https://git.mikk.net/?a=commitdiff_plain;h=9f8254d616fce265f856fded542d3df84a73c61c;p=smtpsink Daemonization now works, and is the default. Creating threads then forking breaks synchronization, leading to a double-init of a mutex, and a core dump.... --- diff --git a/smtpsink.c b/smtpsink.c index f479085..5e836a9 100644 --- a/smtpsink.c +++ b/smtpsink.c @@ -56,8 +56,10 @@ main(int argc, char **argv) int concurrency = 10000; char *l_default = "0.0.0.0:25"; int flaglisten = 0; + char **listeners = malloc(argc * sizeof(char *)); + int i, nlisten = 0; - int daemonize = 0; + int daemonize = 1; int pidfd = -1; uid_t uid = 0; gid_t gid = 0; @@ -80,7 +82,7 @@ main(int argc, char **argv) usage(argv[0]); break; case 'l': - new_listener(optarg); + listeners[nlisten++] = optarg; flaglisten = 1; break; case 'u': @@ -135,7 +137,11 @@ main(int argc, char **argv) openlog("smtpsink",LOG_PID,LOG_MAIL); signal(SIGPIPE,SIG_IGN); - pthread_create(&sl, 0, sigloop, event_init()); + pthread_create(&sl, 0, sigloop, event_init()); + + for (i = 0; i < nlisten; i++) { + new_listener(listeners[i]); + } conn_pool_init(concurrency); io_init();