diff --git a/core/include/priority_queue.h b/core/include/priority_queue.h index f1df5a6d2c9a8952087d97dcb056337c40551d99..bdfdaab1c9408b6e4aa110b00884c50f5e6f7c26 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 261c8a9d66bed37ab453b60ff92d0f4cf140c6d2..ac6e9c92b2e486a7c60176f595b165102d661326 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;