X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=server%2Frequestq.c;h=f3eeaa40427609b19e2f12923285b219ec01ebe2;hp=cfae5694491412ff04e5fb481f5e610703da3d7e;hb=f69d4aa4609ff3daa71733da1ea0fcd8322ab954;hpb=eba5a38ad752c24f77110eb02e96e3895bd0fb3b diff --git a/server/requestq.c b/server/requestq.c index cfae569..f3eeaa4 100644 --- a/server/requestq.c +++ b/server/requestq.c @@ -1,10 +1,28 @@ /* - * 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.1 1995-05-15 12:12:22 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 * Request queue. * * @@ -14,15 +32,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,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 = malloc(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; @@ -82,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; } +