diff --git a/src/switch_time.c b/src/switch_time.c index 1393b30728..3e0e991adb 100644 --- a/src/switch_time.c +++ b/src/switch_time.c @@ -289,13 +289,17 @@ static switch_status_t timer_check(switch_timer_t *timer, switch_bool_t step) static switch_status_t timer_destroy(switch_timer_t *timer) { timer_private_t *private_info = timer->private_info; - switch_mutex_lock(globals.mutex); - TIMER_MATRIX[timer->interval].count--; - if (TIMER_MATRIX[timer->interval].count == 0) { - TIMER_MATRIX[timer->interval].tick = 0; + if (timer->interval < MAX_ELEMENTS) { + switch_mutex_lock(globals.mutex); + TIMER_MATRIX[timer->interval].count--; + if (TIMER_MATRIX[timer->interval].count == 0) { + TIMER_MATRIX[timer->interval].tick = 0; + } + switch_mutex_unlock(globals.mutex); + } + if (private_info) { + private_info->ready = 0; } - switch_mutex_unlock(globals.mutex); - private_info->ready = 0; return SWITCH_STATUS_SUCCESS; }