From 07e2505ebd5c27bb6ce9d5ac92b42e94be958e94 Mon Sep 17 00:00:00 2001
From: Oleg Hahm <oleg@hobbykeller.org>
Date: Sat, 22 Aug 2015 12:06:13 +0200
Subject: [PATCH] core: assertion not to add twice to priority_queue

---
 core/include/priority_queue.h | 2 ++
 core/priority_queue.c         | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/core/include/priority_queue.h b/core/include/priority_queue.h
index f1df5a6d2c..bdfdaab1c9 100644
--- a/core/include/priority_queue.h
+++ b/core/include/priority_queue.h
@@ -98,6 +98,8 @@ priority_queue_node_t *priority_queue_remove_head(priority_queue_t *root);
  *
  * @param[in,out]   root    the queue's root
  * @param[in]       new_obj the object to prepend
+ *
+ * @pre The queue does not already contain @p new_obj.
  */
 void priority_queue_add(priority_queue_t *root, priority_queue_node_t *new_obj);
 
diff --git a/core/priority_queue.c b/core/priority_queue.c
index 261c8a9d66..ac6e9c92b2 100644
--- a/core/priority_queue.c
+++ b/core/priority_queue.c
@@ -18,6 +18,7 @@
  */
 
 #include <inttypes.h>
+#include <assert.h>
 
 #include "priority_queue.h"
 
@@ -55,6 +56,8 @@ void priority_queue_add(priority_queue_t *root, priority_queue_node_t *new_obj)
     priority_queue_node_t *node = (priority_queue_node_t *) root;
 
     while (node->next != NULL) {
+        /* not trying to add the same node twice */
+        assert(node->next != new_obj);
         if (node->next->priority > new_obj->priority) {
             new_obj->next = node->next;
             node->next = new_obj;
-- 
GitLab