Request queue.
authorSebastian Hammer <quinn@indexdata.com>
Mon, 15 May 1995 12:12:22 +0000 (12:12 +0000)
committerSebastian Hammer <quinn@indexdata.com>
Mon, 15 May 1995 12:12:22 +0000 (12:12 +0000)
server/requestq.c [new file with mode: 0644]

diff --git a/server/requestq.c b/server/requestq.c
new file mode 100644 (file)
index 0000000..cfae569
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 1994, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Log: requestq.c,v $
+ * Revision 1.1  1995-05-15 12:12:22  quinn
+ * Request queue.
+ *
+ *
+ */
+
+/*
+ * Simple queue management.
+ *
+ * We also use the request-freelist to store encoding buffers, rather than
+ * freeing and malloc'ing them on each cycle.
+ */
+
+#include <stdlib.h>
+
+#include <dmalloc.h>
+#include <session.h>
+
+static request *request_list = 0;  /* global freelist for requests */
+
+void request_enq(request_q *q, request *r)
+{
+    if (q->tail)
+       q->tail->next = r;
+    else
+       q->head = r;
+    q->tail = r;
+    q->num++;
+}
+
+request *request_head(request_q *q)
+{
+    return q->head;
+}
+
+request *request_deq(request_q *q)
+{
+    request *r = q->head;
+
+    if (!r)
+       return 0;
+    q->head = q->head->next;
+    if (!q->head)
+       q->tail = 0;
+    q->num--;
+    return r;
+}
+
+void request_initq(request_q *q)
+{
+    q->head = q->tail = 0;
+    q->num = 0;
+}
+
+request *request_get(void)
+{
+    request *r = request_list;
+
+    if (r)
+       request_list = r->next;
+    else
+    {
+       if (!(r = malloc(sizeof(*r))))
+           abort();
+       r->response = 0;
+       r->size_response = 0;
+    }
+    r->len_refid = 0;
+    r->request = 0;
+    r->request_mem = 0;
+    r->len_response = 0;
+    r->state = REQUEST_IDLE;
+    r->next = 0;
+    return r;
+}
+
+void request_release(request *r)
+{
+    r->next = request_list;
+    request_list = r;
+}