diff --git a/core/include/priority_queue.h b/core/include/priority_queue.h index 1a4391c2a3..86b388297e 100644 --- a/core/include/priority_queue.h +++ b/core/include/priority_queue.h @@ -43,11 +43,40 @@ typedef struct queue { */ #define PRIORITY_QUEUE_NODE_INIT { NULL, 0, 0 } +/** + * @brief Initialize a priority queue node object. + * @details For initialization of variables use PRIORITY_QUEUE_NODE_INIT + * instead. Only use this function for dynamically allocated + * priority queue nodes. + * @param[out] priority_queue_node + * pre-allocated priority_queue_node_t object, must not be NULL. + */ +static inline void priority_queue_node_init( + priority_queue_node_t *priority_queue_node) +{ + priority_queue_node_t qn = PRIORITY_QUEUE_NODE_INIT; + *priority_queue_node = qn; +} + /** * @brief Static initializer for priority_queue_t. */ #define PRIORITY_QUEUE_INIT { NULL } +/** + * @brief Initialize a priority queue object. + * @details For initialization of variables use PRIORITY_QUEUE_INIT + * instead. Only use this function for dynamically allocated + * priority queues. + * @param[out] priority_queue + * pre-allocated priority_queue_t object, must not be NULL. + */ +static inline void priority_queue_init(priority_queue_t *priority_queue) +{ + priority_queue_t q = PRIORITY_QUEUE_INIT; + *priority_queue = q; +} + /** * @brief remove the priority queue's head * diff --git a/sys/vtimer/vtimer.c b/sys/vtimer/vtimer.c index 43de93e5c4..3fa8c2df68 100644 --- a/sys/vtimer/vtimer.c +++ b/sys/vtimer/vtimer.c @@ -49,8 +49,8 @@ static int vtimer_set(vtimer_t *timer); static int set_longterm(vtimer_t *timer); static int set_shortterm(vtimer_t *timer); -static priority_queue_t longterm_priority_queue_root; -static priority_queue_t shortterm_priority_queue_root; +static priority_queue_t longterm_priority_queue_root = PRIORITY_QUEUE_INIT; +static priority_queue_t shortterm_priority_queue_root = PRIORITY_QUEUE_INIT; static vtimer_t longterm_tick_timer; static uint32_t longterm_tick_start; diff --git a/tests/unittests/tests-core/tests-core-priority-queue.c b/tests/unittests/tests-core/tests-core-priority-queue.c index 46f700f7bf..76875c9b7c 100644 --- a/tests/unittests/tests-core/tests-core-priority-queue.c +++ b/tests/unittests/tests-core/tests-core-priority-queue.c @@ -15,13 +15,15 @@ #define Q_LEN (4) -static priority_queue_t q; +static priority_queue_t q = PRIORITY_QUEUE_INIT; static priority_queue_node_t qe[Q_LEN]; static void set_up(void) { - q.first = NULL; - memset(qe, 0, sizeof(qe)); + priority_queue_init(&q); + for (unsigned i = 0; i < sizeof(qe)/sizeof(priority_queue_node_t); ++i) { + priority_queue_node_init(&(qe[i])); + } } static void test_priority_queue_remove_head_empty(void)