/* Daemon stop sequence */ static void stop_bfd(int status) { struct rusage usage; if (__test_bit(CONFIG_TEST_BIT, &debug)) return; /* Stop daemon */ pidfile_rm(bfd_pidfile); /* Clean data */ free_global_data(global_data); bfd_dispatcher_release(bfd_data); free_bfd_data(bfd_data); free_bfd_buffer(); thread_destroy_master(master); free_parent_mallocs_exit(); /* * Reached when terminate signal catched. * finally return to parent process. */ if (__test_bit(LOG_DETAIL_BIT, &debug)) { getrusage(RUSAGE_SELF, &usage); log_message(LOG_INFO, "Stopped - used %ld.%6.6ld user time, %ld.%6.6ld system time", usage.ru_utime.tv_sec, usage.ru_utime.tv_usec, usage.ru_stime.tv_sec, usage.ru_stime.tv_usec); } else log_message(LOG_INFO, "Stopped"); #ifdef ENABLE_LOG_TO_FILE if (log_file_name) close_log_file(); #endif closelog(); #ifndef _MEM_CHECK_LOG_ FREE_PTR(bfd_syslog_ident); #else if (bfd_syslog_ident) free(bfd_syslog_ident); #endif close_std_fd(); exit(status); }
/* Daemon stop sequence */ static void stop_check(int status) { /* Destroy master thread */ signal_handler_destroy(); thread_destroy_master(master); free_checkers_queue(); free_ssl(); if (!__test_bit(DONT_RELEASE_IPVS_BIT, &debug)) clear_services(); ipvs_stop(); #ifdef _WITH_SNMP_CHECKER_ if (global_data->enable_snmp_checker) check_snmp_agent_close(); #endif /* Stop daemon */ pidfile_rm(checkers_pidfile); /* Clean data */ free_global_data(global_data); free_check_data(check_data); #ifdef _WITH_VRRP_ free_interface_queue(); #endif free_parent_mallocs_exit(); /* * Reached when terminate signal catched. * finally return to parent process. */ log_message(LOG_INFO, "Stopped"); closelog(); #ifndef _MEM_CHECK_LOG_ FREE_PTR(check_syslog_ident); #else if (check_syslog_ident) free(check_syslog_ident); #endif exit(status); }