X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=server%2Frequestq.c;h=f3eeaa40427609b19e2f12923285b219ec01ebe2;hp=d9a3a34e06075714595caa89f2ff7bd26f243117;hb=8de81d57ebf189d37a160fe66df667b50ba7cb86;hpb=2004bbd9b3bbce5eb8ecc49520255b3d0bf578b9 diff --git a/server/requestq.c b/server/requestq.c index d9a3a34..f3eeaa4 100644 --- a/server/requestq.c +++ b/server/requestq.c @@ -1,10 +1,25 @@ /* - * Copyright (C) 1994, Index Data. + * Copyright (C) 1994-1998, 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 + * Revision 1.6 1998-02-11 11:53:35 adam + * Changed code so that it compiles as C++. + * + * Revision 1.5 1998/02/10 11:03:56 adam + * Added support for extended handlers in backend server interface. + * + * Revision 1.4 1997/10/27 13:55:03 adam + * Fixed memory leak: member response wasn't freed when queue + * was destroyed. + * + * Revision 1.3 1997/09/01 08:53:00 adam + * New windows NT/95 port using MSV5.0. The test server 'ztest' was + * moved a separate directory. MSV5.0 project server.dsp created. + * As an option, the server can now operate as an NT service. + * + * Revision 1.2 1995/11/01 13:54:57 quinn * Minor adjustments * * Revision 1.1 1995/05/15 12:12:22 quinn @@ -23,9 +38,7 @@ #include #include -#include - -static request *request_list = 0; /* global freelist for requests */ +#include "session.h" void request_enq(request_q *q, request *r) { @@ -57,27 +70,42 @@ 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->refid = 0; r->request = 0; r->request_mem = 0; r->len_response = 0; + r->clientData = 0; r->state = REQUEST_IDLE; r->next = 0; return r; @@ -85,6 +113,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; } +