diff options
author | Paul J Stevens <paul@nfg.nl> | 2010-10-29 22:35:29 +0200 |
---|---|---|
committer | Paul J Stevens <paul@nfg.nl> | 2010-10-29 22:39:34 +0200 |
commit | ac2cebb1bcd4d5d0d4ac880dea46d075e035b7fa (patch) | |
tree | 6124fd76e1546b580486dec16391a07417d537c3 | |
parent | 82e23f355ea43dbcaa23950ef227446dd41d5697 (diff) |
fix for #863 (psv)
-rw-r--r-- | src/server.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/server.c b/src/server.c index 807f197a..339eec63 100644 --- a/src/server.c +++ b/src/server.c @@ -45,7 +45,7 @@ static void server_config_load(serverConfig_t * conf, const char * const service static int server_set_sighandler(void); void disconnect_all(void); -struct event *sig_int, *sig_hup, *sig_pipe; +struct event *sig_int, *sig_hup, *sig_pipe, *sig_term; struct event *pev = NULL; SSL_CTX *tls_context; @@ -547,7 +547,6 @@ void server_sig_cb(int fd, short event, void *arg) case SIGPIPE: // ignore break; default: - disconnect_all(); exit(0); break; } @@ -558,9 +557,11 @@ static int server_set_sighandler(void) sigset_t set; sig_int = g_new0(struct event, 1); sig_hup = g_new0(struct event, 1); + sig_term = g_new0(struct event, 1); signal_set(sig_int, SIGINT, server_sig_cb, sig_int); signal_add(sig_int, NULL); signal_set(sig_hup, SIGHUP, server_sig_cb, sig_hup); signal_add(sig_hup, NULL); + signal_set(sig_term, SIGTERM, server_sig_cb, sig_term); signal_add(sig_term, NULL); sigemptyset(&set); sigaddset(&set, SIGPIPE); @@ -575,6 +576,7 @@ static int server_set_sighandler(void) // Public methods void disconnect_all(void) { + TRACE(TRACE_INFO, "disconnecting all"); db_disconnect(); auth_disconnect(); g_mime_shutdown(); @@ -592,6 +594,10 @@ void disconnect_all(void) g_free(sig_hup); sig_hup = NULL; } + if (sig_term) { + g_free(sig_term); + sig_term = NULL; + } } static void server_pidfile(serverConfig_t *conf) |