X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=chunk_queue.c;h=08f57e9d1ecf9bae1cadead0757fe29418c446c3;hp=bb97c6902ae92379b04033990598c958a8dd76b4;hb=HEAD;hpb=ec354cf583bc2838ecfac64c428d3f992681c5fc diff --git a/chunk_queue.c b/chunk_queue.c index bb97c690..1f11359f 100644 --- a/chunk_queue.c +++ b/chunk_queue.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2007-2009 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2007 Andre Noll , see file COPYING. */ /** \file chunk_queue.c Queuing functions for paraslash senders. */ @@ -11,9 +7,9 @@ #include "para.h" #include "list.h" #include "afh.h" -#include "vss.h" #include "string.h" #include "error.h" +#include "chunk_queue.h" /** * Senders may use the chunk queue facility to deal with laggy connections. It @@ -56,7 +52,7 @@ int cq_enqueue(struct chunk_queue *cq, const char *buf, size_t num_bytes) if (cq->num_pending + num_bytes > cq->max_pending) return -E_QUEUE; - qc = para_malloc(sizeof(struct queued_chunk)); + qc = alloc(sizeof(struct queued_chunk)); cq->num_pending += num_bytes; qc->buf = buf; qc->num_bytes = num_bytes; @@ -82,12 +78,14 @@ struct queued_chunk *cq_peek(struct chunk_queue *cq) /** * Remove the current chunk from the queue. * - * \param cq The chunk to remove. + * \param cq The queue to remove from. */ void cq_dequeue(struct chunk_queue *cq) { struct queued_chunk *qc = cq_peek(cq); assert(qc); + assert(cq->num_pending >= qc->num_bytes); + cq->num_pending -= qc->num_bytes; list_del(&qc->node); free(qc); } @@ -132,8 +130,8 @@ int cq_get(struct queued_chunk *qc, const char **buf, size_t *num_bytes) */ struct chunk_queue *cq_new(size_t max_pending) { - struct chunk_queue *cq = para_malloc(sizeof(*cq)); - INIT_LIST_HEAD(&cq->q); + struct chunk_queue *cq = alloc(sizeof(*cq)); + init_list_head(&cq->q); cq->max_pending = max_pending; cq->num_pending = 0; return cq;