From 4440831f19d06d85f8a0bd32765c6aee1dd5e622 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Thu, 27 Jan 2011 17:19:33 +0100 Subject: [PATCH] queue.c: fixed bug where dequeue returns a invalid pointer. --- src/queue.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/queue.c b/src/queue.c index c04ada2..0131bb1 100644 --- a/src/queue.c +++ b/src/queue.c @@ -96,7 +96,7 @@ void* queue_dequeue(queue_t q) { obj = q->tail.n->block[q->tail.i++]; - if (q->tail.n == q->head.n && q->tail.i > q->head.i) { + if (q->tail.n == q->head.n && q->tail.i >= q->head.i) { q->tail.i = q->head.i = 0; } else if (q->tail.i >= BLOCK_SIZE) { dealloc_node(&q->tail); @@ -110,7 +110,8 @@ int queue_isempty(queue_t q) { if (q == NULL) return -1; - return q->head.n == q->tail.n && q->head.i == q->tail.i; + return q->head.n == q->tail.n + && q->head.i == 0 && q->tail.i == 0; } size_t queue_num_items(queue_t q) {