X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Frequestq.c;h=da4884ec3550848c3b4286e996bd2b0779032088;hb=55c6ac70550af857d80ef233147dbc986e4095e1;hp=cfae5694491412ff04e5fb481f5e610703da3d7e;hpb=eba5a38ad752c24f77110eb02e96e3895bd0fb3b;p=yaz-moved-to-github.git diff --git a/server/requestq.c b/server/requestq.c index cfae569..da4884e 100644 --- a/server/requestq.c +++ b/server/requestq.c @@ -4,7 +4,19 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: requestq.c,v $ - * Revision 1.1 1995-05-15 12:12:22 quinn + * 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 * Request queue. * * @@ -14,15 +26,13 @@ * Simple queue management. * * We also use the request-freelist to store encoding buffers, rather than - * freeing and malloc'ing them on each cycle. + * freeing and xmalloc'ing them on each cycle. */ #include -#include -#include - -static request *request_list = 0; /* global freelist for requests */ +#include +#include "session.h" void request_enq(request_q *q, request *r) { @@ -54,23 +64,36 @@ 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 *r1, *r = q->list; + while (r) + { + xfree (r->response); + r1 = r; + r = r->next; + xfree (r1); + } +} + +request *request_get(request_q *q) { - request *r = request_list; + request *r = q->list; if (r) - request_list = r->next; + q->list = r->next; else { - if (!(r = malloc(sizeof(*r)))) + if (!(r = xmalloc(sizeof(*r)))) abort(); r->response = 0; r->size_response = 0; } + r->q = q; r->len_refid = 0; r->request = 0; r->request_mem = 0; @@ -82,6 +105,7 @@ 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; }