]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix cpumon
authorMoises Silva <moy@sangoma.com>
Mon, 5 Apr 2010 22:28:13 +0000 (18:28 -0400)
committerMoises Silva <moy@sangoma.com>
Mon, 5 Apr 2010 22:28:13 +0000 (18:28 -0400)
libs/freetdm/src/ftdm_io.c

index 90916694ed90ee4ff3c6518abc31354ff1d05ef0..82301c0a5ca33cc0191e242c7aa497d654d75d7c 100644 (file)
@@ -3650,26 +3650,40 @@ static void *ftdm_cpu_monitor_run(ftdm_thread_t *me, void *obj)
        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");
                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");
                return FTDM_FAIL;
        }
        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);
-       while(monitor->running) {
+       if (!globals.cpu_monitor.interrupt) {
+               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_interrupt_destroy(&globals.cpu_monitor.interrupt);
 }
 
 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_start(&globals.cpu_monitor) != FTDM_SUCCESS) {
+               if (ftdm_cpu_monitor_start() != FTDM_SUCCESS) {
                        return FTDM_FAIL;
                }
        }
@@ -3745,7 +3759,7 @@ FT_DECLARE(ftdm_status_t) ftdm_global_destroy(void)
 
        globals.running = 0;    
 
-       ftdm_cpu_monitor_stop(&globals.cpu_monitor);
+       ftdm_cpu_monitor_stop();
 
        globals.span_index = 0;
 
@@ -3780,7 +3794,6 @@ FT_DECLARE(ftdm_status_t) ftdm_global_destroy(void)
        ftdm_mutex_unlock(globals.mutex);
        ftdm_mutex_destroy(&globals.mutex);
        ftdm_mutex_destroy(&globals.span_mutex);
-       ftdm_interrupt_destroy(&globals.cpu_monitor.interrupt);
 
        memset(&globals, 0, sizeof(globals));
        return FTDM_SUCCESS;