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