summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J Stevens <paul@nfg.nl>2010-10-29 22:35:29 +0200
committerPaul J Stevens <paul@nfg.nl>2010-10-29 22:39:34 +0200
commitac2cebb1bcd4d5d0d4ac880dea46d075e035b7fa (patch)
tree6124fd76e1546b580486dec16391a07417d537c3
parent82e23f355ea43dbcaa23950ef227446dd41d5697 (diff)
fix for #863 (psv)
-rw-r--r--src/server.c10
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)