From 9c1de9b64201f6b74a79d1e561ba221aba7c8ec7 Mon Sep 17 00:00:00 2001 From: Fredrik Thulin <fredrik@thulin.net> Date: Fri, 14 Dec 2012 15:46:11 +0100 Subject: [PATCH] Graceful shutdown on SIGTERM. Helps find resource leaks, if nothing else. --- gck-rpc-daemon-standalone.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gck-rpc-daemon-standalone.c b/gck-rpc-daemon-standalone.c index 6aff4d3..563f83f 100644 --- a/gck-rpc-daemon-standalone.c +++ b/gck-rpc-daemon-standalone.c @@ -32,6 +32,7 @@ #include <unistd.h> #include <stdlib.h> #include <string.h> +#include <signal.h> #include <dlfcn.h> #include <pthread.h> @@ -111,6 +112,7 @@ static int install_syscall_filter(void) ALLOW_SYSCALL(set_robust_list), ALLOW_SYSCALL(recvfrom), ALLOW_SYSCALL(madvise), + ALLOW_SYSCALL(rt_sigaction), KILL_PROCESS, }; struct sock_fprog prog = { @@ -154,6 +156,11 @@ static int usage(void) exit(2); } +void termination_handler (int signum) +{ + is_running = 0; +} + int main(int argc, char *argv[]) { CK_C_GetFunctionList func_get_list; @@ -225,6 +232,10 @@ int main(int argc, char *argv[]) if (sock == -1) exit(1); + /* Shut down gracefully on SIGTERM. */ + if (signal (SIGTERM, termination_handler) == SIG_IGN) + signal (SIGTERM, SIG_IGN); + is_running = 1; while (is_running) { FD_ZERO(&read_fds); -- GitLab