summaryrefslogtreecommitdiff
path: root/common/queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/queue.c')
-rw-r--r--common/queue.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/common/queue.c b/common/queue.c
index 8018e4c0b0..46ea749979 100644
--- a/common/queue.c
+++ b/common/queue.c
@@ -19,8 +19,12 @@ int queue_is_empty(const struct queue *q)
int queue_has_space(const struct queue *q, int unit_count)
{
- return (q->tail + unit_count * q->unit_bytes) <=
- (q->head + q->buf_bytes - q->unit_bytes);
+ if (q->tail >= q->head)
+ return (q->tail + unit_count * q->unit_bytes) <=
+ (q->head + q->buf_bytes - q->unit_bytes);
+ else
+ return (q->tail + unit_count * q->unit_bytes) <=
+ (q->head - q->unit_bytes);
}
void queue_add_units(struct queue *q, const void *src, int unit_count)