diff --git a/core/queue.c b/core/queue.c index 02e89a5e..b6fbcb72 100644 --- a/core/queue.c +++ b/core/queue.c @@ -86,6 +86,14 @@ void queue_init(struct queue *queue, unsigned int flags, _q_init(&queue->q_tracks); } +void queue_deinit(struct queue *queue) +{ + _q_clear(&queue->q_tracks); + g_slist_free(queue->q_sort); + queue->q_sort = NULL; + queue->q_length = 0; +} + void queue_set_flag(struct queue *queue, enum queue_flags flag) { queue->q_flags |= flag; diff --git a/include/core/queue.h b/include/core/queue.h index 1bb4893b..b7c45087 100644 --- a/include/core/queue.h +++ b/include/core/queue.h @@ -55,6 +55,9 @@ struct queue { /* Called to initialize a queue. */ void queue_init(struct queue *, unsigned int, const struct queue_ops *); +/* Called to deinitialize a queue. */ +void queue_deinit(struct queue *); + /* Called to set a queue flag. */ void queue_set_flag(struct queue *, enum queue_flags); diff --git a/tests/core/queue.c b/tests/core/queue.c index c89551a8..733ab43a 100644 --- a/tests/core/queue.c +++ b/tests/core/queue.c @@ -216,8 +216,10 @@ static void test_stress(unsigned int N) test_loop_equal(queue_size(&q), ex_size - (i + 1), i); } test_loop_passed(); - test_equal(q.q_length, 0); - test_equal(queue_size(&q), 0); + queue_deinit(&q); + test_equal(q.q_length, 0); + test_equal(queue_size(&q), 0); + test_equal((void *)q.q_sort, NULL); } static void test_basics() { test_stress(13); } @@ -295,6 +297,8 @@ static void test_rand_select() /* q = { } */ test_equal((void *)queue_next(&q), NULL); + + queue_deinit(&q); } static void test_sorting() @@ -376,8 +380,10 @@ static void test_sorting() } test_loop_passed(); test_equal(count_sort, 6); - g_queue_clear(&q.q_tracks._queue); - g_slist_free(q.q_sort); + queue_deinit(&q); + test_equal(q.q_length, 0); + test_equal(queue_size(&q), 0); + test_equal((void *)q.q_sort, NULL); __test_deinit_core(); }