core/timer: Allow an already scheduled timer to be re-scheduled at a new time

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
diff --git a/src/timer.c b/src/timer.c
index 217f652..77fb003 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -69,8 +69,12 @@
  */
 void osmo_timer_add(struct osmo_timer_list *timer)
 {
-	timer->active = 1;
-	INIT_LLIST_HEAD(&timer->list);
+	if (timer->active) {
+		rb_erase(&timer->node, &timer_root);
+	} else {
+		timer->active = 1;
+		INIT_LLIST_HEAD(&timer->list);
+	}
 	__add_timer(timer);
 }