From 6bee11e68f4ad80a7d5d7d8da77df2046559f6fe Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Mon, 11 May 2009 22:12:20 +0000 Subject: [PATCH] Merged revisions 193718 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r193718 | russell | 2009-05-11 17:04:40 -0500 (Mon, 11 May 2009) | 12 lines Fix some timer state corruption. In res_timer_timerfd, handle the case that set_rate gets called while a timer is still in continuous mode. In this case, we want to remember the configured rate, but not actually set it until continuous mode has been disabled. Thanks to dvossel for finding and helping to debug the problem. (closes issue #15080) Reported by: dvossel Tested by: dvossel ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@193719 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_timing_timerfd.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/res/res_timing_timerfd.c b/res/res_timing_timerfd.c index 9688758f9c..fb35ffb43f 100644 --- a/res/res_timing_timerfd.c +++ b/res/res_timing_timerfd.c @@ -134,7 +134,7 @@ static int timerfd_timer_set_rate(int handle, unsigned int rate) struct timerfd_timer *our_timer, find_helper = { .handle = handle, }; - int res; + int res = 0; if (!(our_timer = ao2_find(timerfd_timers, &find_helper, OBJ_POINTER))) { ast_log(LOG_ERROR, "Couldn't find timer with handle %d\n", handle); @@ -146,7 +146,9 @@ static int timerfd_timer_set_rate(int handle, unsigned int rate) our_timer->saved_timer.it_interval.tv_sec = our_timer->saved_timer.it_value.tv_sec; our_timer->saved_timer.it_interval.tv_nsec = our_timer->saved_timer.it_value.tv_nsec; - res = timerfd_settime(handle, 0, &our_timer->saved_timer, NULL); + if (!our_timer->is_continuous) { + res = timerfd_settime(handle, 0, &our_timer->saved_timer, NULL); + } ao2_ref(our_timer, -1);