[asterisk-commits] russell: trunk r193718 - /trunk/res/res_timing_timerfd.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon May 11 17:04:44 CDT 2009


Author: russell
Date: Mon May 11 17:04:40 2009
New Revision: 193718

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=193718
Log:
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

Modified:
    trunk/res/res_timing_timerfd.c

Modified: trunk/res/res_timing_timerfd.c
URL: http://svn.asterisk.org/svn-view/asterisk/trunk/res/res_timing_timerfd.c?view=diff&rev=193718&r1=193717&r2=193718
==============================================================================
--- trunk/res/res_timing_timerfd.c (original)
+++ trunk/res/res_timing_timerfd.c Mon May 11 17:04:40 2009
@@ -134,7 +134,7 @@
 	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 @@
 	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);
 




More information about the asterisk-commits mailing list