]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix mod_posix_timer segmentation fault
authorChristopher Rienzo <chris@rienzo.net>
Sat, 17 Dec 2011 00:48:43 +0000 (00:48 +0000)
committerChristopher Rienzo <chris@rienzo.net>
Sat, 17 Dec 2011 00:48:43 +0000 (00:48 +0000)
src/mod/timers/mod_posix_timer/mod_posix_timer.c

index d44563ba8a7916be9972422213693d34a5666649..80acfa58644d68037b428043cf669a0e98c1a2bd 100644 (file)
@@ -61,12 +61,20 @@ static void posix_timer_notify(sigval_t data)
 {
        interval_timer_t *it = (interval_timer_t *)data.sival_ptr;
        switch_mutex_lock(it->mutex);
-       it->tick += 1 + timer_getoverrun(it->timer);
-       switch_thread_cond_broadcast(it->cond);
+       if (it->users) {
+               it->tick += 1 + timer_getoverrun(it->timer);
+               switch_thread_cond_broadcast(it->cond);
+       }
        switch_mutex_unlock(it->mutex);
 
        if (globals.shutdown) {
-               timer_delete(it->timer);
+               switch_mutex_lock(it->mutex);
+               if (it->users) {
+                       timer_delete(it->timer);
+                       memset(&it->timer, 0, sizeof(it->timer));
+                       it->users = 0;
+               }
+               switch_mutex_unlock(it->mutex);
        }
 }