From 131ea70b6a352e326028dad355981f7bf6748681 Mon Sep 17 00:00:00 2001 From: Sergey Popov Date: Tue, 3 Jan 2012 04:51:57 +0400 Subject: [PATCH] fix improper SIGTERM handling, improve freeing resources --- yasnd.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yasnd.c b/yasnd.c index 64b6418..6c0dd22 100644 --- a/yasnd.c +++ b/yasnd.c @@ -325,6 +325,11 @@ void signal_handler(int signum) { void free_resources() { + // lock Main Loop + loop_locked=true; + // kill Main Loop clone process + kill(mainloop_clone_pid,SIGTERM); + waitpid(mainloop_clone_pid,NULL,__WCLONE); // Stop IPC loop and remove IPC queue ipc_free(); // free config structure @@ -341,11 +346,6 @@ void signal_handler(int signum) if (signum==SIGHUP) { log_event("SIGHUP captured, daemon re-read config"); - // lock Main Loop - loop_locked=true; - // kill Main Loop clone process - kill(mainloop_clone_pid,SIGTERM); - waitpid(mainloop_clone_pid,NULL,__WCLONE); // free all resources free_resources(); // Init IPC loop again @@ -360,12 +360,12 @@ void signal_handler(int signum) if (signum==SIGTERM) { log_event("SIGTERM captured, daemon stopping"); + // free resources + free_resources(); // block LPT control circuit lpt_lock(); // close log decriptor closelog(); - // free resources - free_resources(); // exit(EXIT_SUCCESS); }