fix improper SIGTERM handling, improve freeing resources

This commit is contained in:
Sergey Popov 2012-01-03 04:51:57 +04:00
parent 5e3891a985
commit 131ea70b6a

14
yasnd.c
View File

@ -325,6 +325,11 @@ void signal_handler(int signum)
{ {
void free_resources() 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 // Stop IPC loop and remove IPC queue
ipc_free(); ipc_free();
// free config structure // free config structure
@ -341,11 +346,6 @@ void signal_handler(int signum)
if (signum==SIGHUP) if (signum==SIGHUP)
{ {
log_event("SIGHUP captured, daemon re-read config"); 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 all resources
free_resources(); free_resources();
// Init IPC loop again // Init IPC loop again
@ -360,12 +360,12 @@ void signal_handler(int signum)
if (signum==SIGTERM) if (signum==SIGTERM)
{ {
log_event("SIGTERM captured, daemon stopping"); log_event("SIGTERM captured, daemon stopping");
// free resources
free_resources();
// block LPT control circuit // block LPT control circuit
lpt_lock(); lpt_lock();
// close log decriptor // close log decriptor
closelog(); closelog();
// free resources
free_resources();
// //
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }