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); }