fix a few more XML documentation problems
[asterisk/asterisk.git] / res / res_timing_pthread.c
index b9d295e..0afe9c9 100644 (file)
@@ -151,6 +151,23 @@ static void pthread_timer_close(int handle)
        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 @@ static int pthread_timer_set_rate(int handle, unsigned int rate)
 
        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 @@ static int pthread_timer_disable_continuous(int handle)
        }
 
        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);
 
@@ -273,7 +290,7 @@ static struct pthread_timer *find_timer(int handle, int unlinkobj)
                flags |= OBJ_UNLINK;
        }
 
-       if (!(timer = ao2_find(pthread_timers, &tmp_timer, NULL, flags))) {
+       if (!(timer = ao2_find(pthread_timers, &tmp_timer, flags))) {
                ast_assert(timer != NULL);
                return NULL;
        }
@@ -309,7 +326,7 @@ static int pthread_timer_hash(const void *obj, const int flags)
 /*!
  * \note only PIPE_READ is guaranteed valid 
  */
-static int pthread_timer_cmp(void *obj, void *arg, void *data, int flags)
+static int pthread_timer_cmp(void *obj, void *arg, int flags)
 {
        struct pthread_timer *timer1 = obj, *timer2 = arg;
 
@@ -401,7 +418,7 @@ static void write_byte(int wr_fd)
        } while (0);
 }
 
-static int run_timer(void *obj, void *arg, void *data, int flags)
+static int run_timer(void *obj, void *arg, int flags)
 {
        struct pthread_timer *timer = obj;
 
@@ -427,7 +444,7 @@ static void *do_timing(void *arg)
        while (!timing_thread.stop) {
                struct timespec ts = { 0, };
 
-               ao2_callback(pthread_timers, OBJ_NODATA, run_timer, NULL, NULL);
+               ao2_callback(pthread_timers, OBJ_NODATA, run_timer, NULL);
 
                next_wakeup = ast_tvadd(next_wakeup, ast_tv(0, 5000));