From 4384cd203a958373cf0ab959afb688f9eeba05fc Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Wed, 4 Jan 2017 15:25:15 +0100 Subject: ipcpd: Add boot and shutdown operations These operations separe the starting and joining of the main ipcp threads into ipcp_boot() and ipcp_shutdown() operations. This allows the proper cleanup of user data and user threads after the IPCP is requested to shut down. --- src/ipcpd/local/main.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/ipcpd/local/main.c') diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c index de8c72c2..01e58b91 100644 --- a/src/ipcpd/local/main.c +++ b/src/ipcpd/local/main.c @@ -128,9 +128,6 @@ void ipcp_sig_handler(int sig, siginfo_t * info, void * c) case SIGHUP: case SIGQUIT: if (info->si_pid == irmd_api) { - LOG_DBG("IPCP %d terminating by order of %d. Bye.", - getpid(), info->si_pid); - pthread_rwlock_wrlock(&ipcpi.state_lock); if (ipcp_get_state() == IPCP_INIT) @@ -367,9 +364,16 @@ int main(int argc, char * argv[]) sigaction(SIGHUP, &sig_act, NULL); sigaction(SIGPIPE, &sig_act, NULL); + if (ipcp_init(THIS_TYPE, &local_ops) < 0) { + LOG_ERR("Failed to init IPCP."); + close_logfile(); + exit(EXIT_FAILURE); + } + pthread_sigmask(SIG_BLOCK, &sigset, NULL); - if (ipcp_init(THIS_TYPE, &local_ops) < 0) { + if (ipcp_boot() < 0) { + LOG_ERR("Failed to boot IPCP."); close_logfile(); exit(EXIT_FAILURE); } @@ -382,13 +386,15 @@ int main(int argc, char * argv[]) exit(EXIT_FAILURE); } - ipcp_fini(); + ipcp_shutdown(); if (ipcp_get_state() == IPCP_SHUTDOWN) { pthread_cancel(local_data.sduloop); pthread_join(local_data.sduloop, NULL); } + ipcp_fini(); + local_data_fini(); ap_fini(); -- cgit v1.2.3