Fix sample PQF
[yaz-moved-to-github.git] / server / requestq.c
index d9a3a34..63ce3f3 100644 (file)
@@ -1,15 +1,9 @@
 /*
- * Copyright (C) 1994, Index Data.
+ * Copyright (C) 1994-2003, Index Data.
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
- * $Log: requestq.c,v $
- * Revision 1.2  1995-11-01 13:54:57  quinn
- * Minor adjustments
- *
- * Revision 1.1  1995/05/15  12:12:22  quinn
- * Request queue.
- *
+ * $Id: requestq.c,v 1.10 2003-10-20 18:20:55 adam Exp $
  *
  */
 
 
 #include <stdlib.h>
 
-#include <xmalloc.h>
-#include <session.h>
-
-static request *request_list = 0;  /* global freelist for requests */
+#include <yaz/xmalloc.h>
+#include "session.h"
 
 void request_enq(request_q *q, request *r)
 {
@@ -57,27 +49,43 @@ request *request_deq(request_q *q)
 
 void request_initq(request_q *q)
 {
-    q->head = q->tail = 0;
+    q->head = q->tail = q->list = 0;
     q->num = 0;
 }
 
-request *request_get(void)
+void request_delq(request_q *q)
 {
-    request *r = request_list;
+    request *r1, *r = q->list;
+    while (r)
+    {
+       xfree (r->response);
+        r1 = r;
+        r = r->next;
+        xfree (r1);
+    }
+}
+
+request *request_get(request_q *q)
+{
+    request *r = q->list;
 
     if (r)
-       request_list = r->next;
+       q->list = r->next;
     else
     {
-       if (!(r = xmalloc(sizeof(*r))))
+       if (!(r = (request *)xmalloc(sizeof(*r))))
            abort();
        r->response = 0;
        r->size_response = 0;
     }
+    r->q = q;
     r->len_refid = 0;
-    r->request = 0;
+    r->refid = 0;
+    r->gdu_request = 0;
+    r->apdu_request = 0;
     r->request_mem = 0;
     r->len_response = 0;
+    r->clientData = 0;
     r->state = REQUEST_IDLE;
     r->next = 0;
     return r;
@@ -85,6 +93,8 @@ request *request_get(void)
 
 void request_release(request *r)
 {
-    r->next = request_list;
-    request_list = r;
+    request_q *q = r->q;
+    r->next = q->list;
+    q->list = r;
 }
+