From f00c632df6483cdc413ac5bf932e110199659d42 Mon Sep 17 00:00:00 2001
From: Roman Tsisyk <roman@tsisyk.com>
Date: Mon, 14 Oct 2013 13:10:53 +0400
Subject: [PATCH] Fix OPENTAR-53: "Tarantool ignores kill -15 on startup"

---
 src/tarantool.cc | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/tarantool.cc b/src/tarantool.cc
index aa6bf66e29..24329a30e5 100644
--- a/src/tarantool.cc
+++ b/src/tarantool.cc
@@ -81,7 +81,7 @@ char **main_argv;
 int main_argc;
 static void *main_opt = NULL;
 struct tarantool_cfg cfg;
-static ev_signal *sigs = NULL;
+static ev_signal sigs[4];
 
 int snapshot_pid = 0; /* snapshot processes pid */
 uint32_t snapshot_version = 0;
@@ -453,6 +453,13 @@ signal_free(void)
 		ev_signal_stop(&sigs[i]);
 }
 
+static void
+signal_start(void)
+{
+	for (int i = 0 ; i < 4 ; i++)
+		ev_signal_start(&sigs[i]);
+}
+
 /** Make sure the child has a default signal disposition. */
 static void
 signal_reset()
@@ -505,16 +512,10 @@ signal_init(void)
 		exit(EX_OSERR);
 	}
 
-	sigs = (ev_signal *) palloc(eter_pool, sizeof(ev_signal) * 4);
-	memset(sigs, 0, sizeof(ev_signal) * 4);
 	ev_signal_init(&sigs[0], sig_snapshot, SIGUSR1);
-	ev_signal_start(&sigs[0]);
 	ev_signal_init(&sigs[1], signal_cb, SIGINT);
-	ev_signal_start(&sigs[1]);
 	ev_signal_init(&sigs[2], signal_cb, SIGTERM);
-	ev_signal_start(&sigs[2]);
 	ev_signal_init(&sigs[3], signal_cb, SIGHUP);
-	ev_signal_start(&sigs[3]);
 
 	(void) tt_pthread_atfork(NULL, NULL, signal_reset);
 }
@@ -896,6 +897,7 @@ main(int argc, char **argv)
 			ev_set_io_collect_interval(cfg.io_collect_interval);
 		ev_now_update();
 		start_time = ev_now();
+		signal_start();
 		ev_loop(0);
 	} catch (const Exception& e) {
 		e.log();
-- 
GitLab