paraslash 0.7.3
[paraslash.git] / chunk_queue.c
index bb97c6902ae92379b04033990598c958a8dd76b4..1f11359fcb16e4e55073a5fd36d5d5cff7f5504c 100644 (file)
@@ -1,8 +1,4 @@
-/*
- * Copyright (C) 2007-2009 Andre Noll <maan@systemlinux.org>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2007 Andre Noll <maan@tuebingen.mpg.de>, 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;