Add missing olsr_timer_remove() function to olsr_timer implementation
authorHenning Rogge <hrogge@googlemail.com>
Sat, 5 Mar 2011 14:28:47 +0000 (15:28 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Sat, 5 Mar 2011 14:28:47 +0000 (15:28 +0100)
src/olsr_socket.c
src/olsr_timer.c
src/olsr_timer.h

index db97330..1c074b0 100644 (file)
@@ -59,7 +59,8 @@ struct list_entity socket_head;
 static struct olsr_memcookie_info *socket_memcookie;
 
 /* helper function to free socket entry */
-static inline void olsr_socket_intfree(struct olsr_socket_entry *sock) {
+static inline void
+olsr_socket_intfree(struct olsr_socket_entry *sock) {
   list_remove(&sock->node);
   olsr_memcookie_free(socket_memcookie, sock);
 }
index fb6b2e2..c5ff590 100644 (file)
@@ -111,6 +111,32 @@ olsr_timer_add(const char *name, timer_cb_func callback, bool periodic) {
 }
 
 /**
+ * Removes a group of timers from the scheduler
+ * All pointers to timers of this timer_info will be invalid after this.
+ * @param info pointer to timer info
+ */
+void
+olsr_timer_remove(struct olsr_timer_info *info) {
+  struct olsr_timer_entry *timer, *iterator;
+  int slot;
+
+  for (slot=0; slot < TIMER_WHEEL_SLOTS; slot++) {
+    list_for_each_element_safe(&timer_wheel[slot], timer, timer_list, iterator) {
+      /* remove all timers of this timer_info */
+      if (timer->timer_info == info) {
+        olsr_timer_stop(timer);
+      }
+    }
+  }
+
+  list_remove(&info->node);
+  free (info->name);
+
+  olsr_memcookie_free(timerinfo_cookie, info);
+}
+
+
+/**
  * Start a new timer.
  *
  * @param relative time expressed in milliseconds
@@ -240,11 +266,16 @@ olsr_timer_change(struct olsr_timer_entry *timer, unsigned int rel_time, uint8_t
              olsr_clock_toClockString(&timebuf, timer->timer_clock), timer->timer_cb_context);
 }
 
-/*
+/**
  * This is the one stop shop for all sort of timer manipulation.
- * Depending on the paseed in parameters a new timer is started,
+ * Depending on the passed in parameters a new timer is started,
  * or an existing timer is started or an existing timer is
  * terminated.
+ * @param timer_ptr pointer to timer_entry pointer
+ * @param rel_time time until the new timer should fire, 0 to stop timer
+ * @param jitter_pct jitter of timer in percent
+ * @param context context pointer of timer
+ * @param ti timer_info of timer
  */
 void
 olsr_timer_set(struct olsr_timer_entry **timer_ptr,
index e0b1573..264992a 100644 (file)
@@ -88,6 +88,10 @@ void olsr_timer_init(void);
 void olsr_timer_cleanup(void);
 void olsr_timer_walk(void);
 
+struct olsr_timer_info *EXPORT(olsr_timer_add)(
+    const char *name, timer_cb_func callback, bool periodic) __attribute__((warn_unused_result));
+void olsr_timer_remove(struct olsr_timer_info *);
+
 void EXPORT(olsr_timer_set) (struct olsr_timer_entry **, uint32_t, uint8_t,
     void *, struct olsr_timer_info *);
 struct olsr_timer_entry *EXPORT(olsr_timer_start) (uint32_t, uint8_t,
@@ -95,6 +99,4 @@ struct olsr_timer_entry *EXPORT(olsr_timer_start) (uint32_t, uint8_t,
 void EXPORT(olsr_timer_change)(struct olsr_timer_entry *, uint32_t, uint8_t);
 void EXPORT(olsr_timer_stop) (struct olsr_timer_entry *);
 
-struct olsr_timer_info *EXPORT(olsr_timer_add)(const char *name, timer_cb_func callback, bool periodic);
-
 #endif /* OLSR_TIMER_H_ */