aboutsummaryrefslogtreecommitdiffstats
path: root/res
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-11 22:12:20 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-11 22:12:20 +0000
commitc57e1ff29d68bd927341773444576463c1c383ac (patch)
tree9bc287f37ed0b56c4c515a789c20764f70cf393a /res
parente30b8644534570d076b081b62d7d173647d95de2 (diff)
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: http://svn.digium.com/svn/asterisk/branches/1.6.2@193719 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rw-r--r--res/res_timing_timerfd.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/res/res_timing_timerfd.c b/res/res_timing_timerfd.c
index 9688758f9..fb35ffb43 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);