[asterisk-commits] russell: trunk r163241 - /trunk/res/res_timing_pthread.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Dec 11 15:21:31 CST 2008
Author: russell
Date: Thu Dec 11 15:21:31 2008
New Revision: 163241
URL: http://svn.digium.com/view/asterisk?view=rev&rev=163241
Log:
Fix a problem where continuous mode will get inadvertently get turned off if set_rate()
is used while continuous mode was already turned on.
(closes issue #13738)
Reported by: smurfix
Patches:
res.patch.fixed uploaded by smurfix (license 547)
Modified:
trunk/res/res_timing_pthread.c
Modified: trunk/res/res_timing_pthread.c
URL: http://svn.digium.com/view/asterisk/trunk/res/res_timing_pthread.c?view=diff&rev=163241&r1=163240&r2=163241
==============================================================================
--- trunk/res/res_timing_pthread.c (original)
+++ trunk/res/res_timing_pthread.c Thu Dec 11 15:21:31 2008
@@ -151,6 +151,23 @@
ao2_ref(timer, -1);
}
+static void set_state(struct pthread_timer *timer)
+{
+ unsigned int rate = timer->rate;
+
+ if (rate) {
+ timer->state = TIMER_STATE_TICKING;
+ timer->interval = roundf(1000.0 / ((float) rate));
+ timer->start = ast_tvnow();
+ } else {
+ timer->state = TIMER_STATE_IDLE;
+ timer->interval = 0;
+ timer->start = ast_tv(0, 0);
+ }
+
+ timer->tick_count = 0;
+}
+
static int pthread_timer_set_rate(int handle, unsigned int rate)
{
struct pthread_timer *timer;
@@ -169,10 +186,10 @@
ao2_lock(timer);
timer->rate = rate;
- timer->state = rate ? TIMER_STATE_TICKING : TIMER_STATE_IDLE;
- timer->interval = rate ? roundf(1000.0 / ((float) rate)) : 0;
- timer->start = rate ? ast_tvnow() : ast_tv(0, 0);
- timer->tick_count = 0;
+ if (timer->state != TIMER_STATE_CONTINUOUS) {
+ set_state(timer);
+ }
+
ao2_unlock(timer);
ao2_ref(timer, -1);
@@ -229,7 +246,7 @@
}
ao2_lock(timer);
- timer->state = timer->rate ? TIMER_STATE_TICKING : TIMER_STATE_IDLE;
+ set_state(timer);
read_pipe(timer->pipe[PIPE_READ], 0, 1);
ao2_unlock(timer);
More information about the asterisk-commits
mailing list