X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Frequestq.c;h=26d9b43c48cce774b426437aa7fe261a65be81a1;hb=b0555501e434d0f71f97ea17f282db2e795ff950;hp=d9a3a34e06075714595caa89f2ff7bd26f243117;hpb=2004bbd9b3bbce5eb8ecc49520255b3d0bf578b9;p=yaz-moved-to-github.git diff --git a/server/requestq.c b/server/requestq.c index d9a3a34..26d9b43 100644 --- a/server/requestq.c +++ b/server/requestq.c @@ -1,10 +1,35 @@ /* - * 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.9 2003-02-12 15:06:43 adam + * SOAP, SRW codecs and HTTP transport for YAZ using libxml2. + * Updated ASN.1 for Z39.50 amendment String Identifiers for Schemas. + * + * Revision 1.8 2001/07/19 19:51:41 adam + * Added typecasts to make C++ happy. + * + * Revision 1.7 1999/11/30 13:47:12 adam + * Improved installation. Moved header files to include/yaz. + * + * 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 @@ -22,10 +47,8 @@ #include -#include -#include - -static request *request_list = 0; /* global freelist for requests */ +#include +#include "session.h" void request_enq(request_q *q, request *r) { @@ -57,27 +80,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 +124,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; } +