fix cpumon

This commit is contained in:
Moises Silva 2010-04-05 18:28:13 -04:00
parent ae13883b2a
commit 0414c789e1

View File

@ -3650,26 +3650,40 @@ static void *ftdm_cpu_monitor_run(ftdm_thread_t *me, void *obj)
return NULL; return NULL;
} }
static ftdm_status_t ftdm_cpu_monitor_start(cpu_monitor_t* monitor) static ftdm_status_t ftdm_cpu_monitor_start(void)
{ {
if (ftdm_interrupt_create(&monitor->interrupt, FTDM_INVALID_SOCKET) != FTDM_SUCCESS) { if (ftdm_interrupt_create(&globals.cpu_monitor.interrupt, FTDM_INVALID_SOCKET) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_CRIT, "Failed to create CPU monitor interrupt\n"); ftdm_log(FTDM_LOG_CRIT, "Failed to create CPU monitor interrupt\n");
return FTDM_FAIL; return FTDM_FAIL;
} }
if (ftdm_thread_create_detached(ftdm_cpu_monitor_run, monitor) != FTDM_SUCCESS) { if (ftdm_thread_create_detached(ftdm_cpu_monitor_run, &globals.cpu_monitor) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_CRIT, "Failed to create cpu monitor thread!!\n"); ftdm_log(FTDM_LOG_CRIT, "Failed to create cpu monitor thread!!\n");
return FTDM_FAIL; return FTDM_FAIL;
} }
return FTDM_SUCCESS; return FTDM_SUCCESS;
} }
static void ftdm_cpu_monitor_stop(cpu_monitor_t* monitor) static void ftdm_cpu_monitor_stop(void)
{ {
ftdm_interrupt_signal(monitor->interrupt); if (!globals.cpu_monitor.interrupt) {
while(monitor->running) { return;
}
if (!globals.cpu_monitor.running) {
return;
}
if (ftdm_interrupt_signal(globals.cpu_monitor.interrupt) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_CRIT, "Failed to interrupt the CPU monitor\n");
return;
}
while (globals.cpu_monitor.running) {
ftdm_sleep(10); ftdm_sleep(10);
} }
ftdm_interrupt_destroy(&globals.cpu_monitor.interrupt);
} }
FT_DECLARE(void) ftdm_cpu_monitor_disable(void) FT_DECLARE(void) ftdm_cpu_monitor_disable(void)
@ -3722,7 +3736,7 @@ FT_DECLARE(ftdm_status_t) ftdm_global_configuration(void)
} }
if (!ftdm_cpu_monitor_disabled) { if (!ftdm_cpu_monitor_disabled) {
if (ftdm_cpu_monitor_start(&globals.cpu_monitor) != FTDM_SUCCESS) { if (ftdm_cpu_monitor_start() != FTDM_SUCCESS) {
return FTDM_FAIL; return FTDM_FAIL;
} }
} }
@ -3745,7 +3759,7 @@ FT_DECLARE(ftdm_status_t) ftdm_global_destroy(void)
globals.running = 0; globals.running = 0;
ftdm_cpu_monitor_stop(&globals.cpu_monitor); ftdm_cpu_monitor_stop();
globals.span_index = 0; globals.span_index = 0;
@ -3780,7 +3794,6 @@ FT_DECLARE(ftdm_status_t) ftdm_global_destroy(void)
ftdm_mutex_unlock(globals.mutex); ftdm_mutex_unlock(globals.mutex);
ftdm_mutex_destroy(&globals.mutex); ftdm_mutex_destroy(&globals.mutex);
ftdm_mutex_destroy(&globals.span_mutex); ftdm_mutex_destroy(&globals.span_mutex);
ftdm_interrupt_destroy(&globals.cpu_monitor.interrupt);
memset(&globals, 0, sizeof(globals)); memset(&globals, 0, sizeof(globals));
return FTDM_SUCCESS; return FTDM_SUCCESS;