diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2011-11-13 10:11:31 +0100 |
---|---|---|
committer | Sylvain Munaut <tnt@246tNt.com> | 2011-11-13 10:11:31 +0100 |
commit | a71b8eaca7eed4dfc96f2cebabfc26430416c2e9 (patch) | |
tree | b1f04f3dbd0f41364df61982bdb22222f2ac99d3 | |
parent | cc90d494ceaa3b096b8102bc590fcbe9e6671c6f (diff) |
timer: Better fix to the timer re-scheduling situation
As it turns out, the previous fix didn't cover the case of a
timer X being re-scheduled inside a timer call back expiring at
the same time as the previous X instance.
Written-by: Pablo Neira Ayuso <pablo@gnumonks.org>
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r-- | src/timer.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/timer.c b/src/timer.c index 77fb0039..79d4ad6d 100644 --- a/src/timer.c +++ b/src/timer.c @@ -69,12 +69,9 @@ static void __add_timer(struct osmo_timer_list *timer) */ void osmo_timer_add(struct osmo_timer_list *timer) { - if (timer->active) { - rb_erase(&timer->node, &timer_root); - } else { - timer->active = 1; - INIT_LLIST_HEAD(&timer->list); - } + osmo_timer_del(timer); + timer->active = 1; + INIT_LLIST_HEAD(&timer->list); __add_timer(timer); } |