/****************************************************************************** * * * Function: free_selfmon_collector * * * * Purpose: Free memory allocated for self-monitoring collector * * * * Author: Alexander Vladishev * * * ******************************************************************************/ void free_selfmon_collector() { const char *__function_name = "free_selfmon_collector"; zabbix_log(LOG_LEVEL_DEBUG, "In %s() collector:%p", __function_name, collector); if (NULL == collector) return; LOCK_SM; collector = NULL; if (-1 == shmctl(shm_id, IPC_RMID, 0)) { zabbix_log(LOG_LEVEL_WARNING, "cannot remove shared memory for self-monitoring collector: %s", zbx_strerror(errno)); } UNLOCK_SM; zbx_mutex_destroy(&sm_lock); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
void free_cpu_collector(ZBX_CPUS_STAT_DATA *pcpus) { const char *__function_name = "free_cpu_collector"; #ifdef _WINDOWS int i; #endif zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); #ifdef _WINDOWS remove_perf_counter(pcpus->queue_counter); pcpus->queue_counter = NULL; for (i = 0; i <= pcpus->count; i++) { remove_perf_counter(pcpus->cpu_counter[i]); pcpus->cpu_counter[i] = NULL; } #else zbx_mutex_destroy(&cpustats_lock); #endif #ifdef HAVE_KSTAT_H kstat_close(kc); zbx_free(ksp); #endif zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
void zbx_mem_destroy(zbx_mem_info_t *info) { const char *__function_name = "zbx_mem_destroy"; zabbix_log(LOG_LEVEL_DEBUG, "In %s() descr:'%s'", __function_name, info->mem_descr); if (info->use_lock) zbx_mutex_destroy(&info->mem_lock); if (-1 == shmctl(info->shm_id, IPC_RMID, 0)) { zabbix_log(LOG_LEVEL_WARNING, "cannot remove shared memory for %s: %s", info->mem_descr, zbx_strerror(errno)); } zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
void free_perf_collector() { PERF_COUNTER_DATA *cptr; if (SUCCEED != perf_collector_started()) return; for (cptr = ppsd.pPerfCounterList; cptr != NULL; cptr = cptr->next) { if (NULL != cptr->handle) { PdhRemoveCounter(cptr->handle); cptr->handle = NULL; } } PdhCloseQuery(ppsd.pdh_query); ppsd.pdh_query = NULL; free_perf_counter_list(); zbx_mutex_destroy(&perfstat_access); }
/****************************************************************************** * * * Function: free_collector_data * * * * Purpose: Free memory allocated for collector * * * * Author: Eugene Grigorjev * * * * Comments: Unix version allocated memory as shared. * * * ******************************************************************************/ void free_collector_data() { #ifdef _WINDOWS zbx_free(collector); #else if (NULL == collector) return; if (NONEXISTENT_SHMID != collector->diskstat_shmid) { if (-1 == shmctl(collector->diskstat_shmid, IPC_RMID, 0)) zabbix_log(LOG_LEVEL_WARNING, "cannot remove shared memory for disk statistics collector: %s", zbx_strerror(errno)); diskdevices = NULL; collector->diskstat_shmid = NONEXISTENT_SHMID; } if (-1 == shmctl(shm_id, IPC_RMID, 0)) zabbix_log(LOG_LEVEL_WARNING, "cannot remove shared memory for collector: %s", zbx_strerror(errno)); zbx_mutex_destroy(&diskstats_lock); #endif collector = NULL; }
void zbx_on_exit() { zabbix_log(LOG_LEVEL_DEBUG, "zbx_on_exit() called"); if (SUCCEED == DBtxn_ongoing()) DBrollback(); if (NULL != threads) { int i; sigset_t set; /* ignore SIGCHLD signals in order for zbx_sleep() to work */ sigemptyset(&set); sigaddset(&set, SIGCHLD); sigprocmask(SIG_BLOCK, &set, NULL); for (i = 0; i < threads_num; i++) { if (threads[i]) { kill(threads[i], SIGTERM); threads[i] = ZBX_THREAD_HANDLE_NULL; } } zbx_free(threads); } free_metrics(); zbx_sleep(2); /* wait for all child processes to exit */ DBconnect(ZBX_DB_CONNECT_EXIT); free_database_cache(); DBclose(); free_configuration_cache(); /* free history value cache */ zbx_vc_destroy(); zbx_destroy_itservices_lock(); zbx_mutex_destroy(&node_sync_access); #ifdef HAVE_OPENIPMI free_ipmi_handler(); #endif #ifdef HAVE_SQLITE3 zbx_remove_sqlite3_mutex(); #endif /* free vmware support */ if (0 != CONFIG_VMWARE_FORKS) zbx_vmware_destroy(); free_selfmon_collector(); unload_modules(); zabbix_log(LOG_LEVEL_INFORMATION, "Zabbix Server stopped. Zabbix %s (revision %s).", ZABBIX_VERSION, ZABBIX_REVISION); zabbix_close_log(); #if defined(PS_OVERWRITE_ARGV) setproctitle_free_env(); #endif exit(SUCCEED); }