diff --git a/src/switch_time.c b/src/switch_time.c index d20f9a293e..8897b1007b 100644 --- a/src/switch_time.c +++ b/src/switch_time.c @@ -324,7 +324,12 @@ static switch_status_t timer_next(switch_timer_t *timer) #else int cond_index = 1; #endif + int delta = (int)(private_info->reference - TIMER_MATRIX[timer->interval].tick); + /* sync up timer if it's not been called for a while otherwise it will return instantly several times until it catches up */ + if (delta < 0) { + private_info->reference = timer->tick = TIMER_MATRIX[timer->interval].tick; + } timer_step(timer); while (globals.RUNNING == 1 && private_info->ready && TIMER_MATRIX[timer->interval].tick < private_info->reference) {