From 46888a1eaf769281d0e524e7bbf2e94e047f899f Mon Sep 17 00:00:00 2001
From: Hauke Petersen <hauke.petersen@fu-berlin.de>
Date: Thu, 19 Apr 2018 16:41:13 +0200
Subject: [PATCH] sys/event: allow calling event_post multiple times

---
 sys/event/event.c   | 7 ++++---
 sys/include/event.h | 5 +++++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/event/event.c b/sys/event/event.c
index 570d7e232f..9e6ac213fe 100644
--- a/sys/event/event.c
+++ b/sys/event/event.c
@@ -23,11 +23,12 @@ void event_queue_init(event_queue_t *queue)
 
 void event_post(event_queue_t *queue, event_t *event)
 {
-    assert(!event->list_node.next);
-    assert(queue->waiter);
+    assert(queue && queue->waiter && event);
 
     unsigned state = irq_disable();
-    clist_rpush(&queue->event_list, &event->list_node);
+    if (!event->list_node.next) {
+        clist_rpush(&queue->event_list, &event->list_node);
+    }
     irq_restore(state);
 
     thread_flags_set(queue->waiter, THREAD_FLAG_EVENT);
diff --git a/sys/include/event.h b/sys/include/event.h
index 7072de41e6..0727459c91 100644
--- a/sys/include/event.h
+++ b/sys/include/event.h
@@ -149,6 +149,11 @@ void event_queue_init(event_queue_t *queue);
 /**
  * @brief   Queue an event
  *
+ * The given event will be posted on the given @p queue. If the event is already
+ * queued when calling this function, the event will not be touched and remain
+ * in the previous position on the queue. So reposting an event while it is
+ * already on the queue will have no effect.
+ *
  * @param[in]   queue   event queue to queue event in
  * @param[in]   event   event to queue in event queue
  */
-- 
GitLab