Added ifdef USE_XTIMOSI; so that 'make depend' works.
[yaz-moved-to-github.git] / server / requestq.c
1 /*
2  * Copyright (C) 1994, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: requestq.c,v $
7  * Revision 1.2  1995-11-01 13:54:57  quinn
8  * Minor adjustments
9  *
10  * Revision 1.1  1995/05/15  12:12:22  quinn
11  * Request queue.
12  *
13  *
14  */
15
16 /*
17  * Simple queue management.
18  *
19  * We also use the request-freelist to store encoding buffers, rather than
20  * freeing and xmalloc'ing them on each cycle.
21  */
22
23 #include <stdlib.h>
24
25 #include <xmalloc.h>
26 #include <session.h>
27
28 static request *request_list = 0;  /* global freelist for requests */
29
30 void request_enq(request_q *q, request *r)
31 {
32     if (q->tail)
33         q->tail->next = r;
34     else
35         q->head = r;
36     q->tail = r;
37     q->num++;
38 }
39
40 request *request_head(request_q *q)
41 {
42     return q->head;
43 }
44
45 request *request_deq(request_q *q)
46 {
47     request *r = q->head;
48
49     if (!r)
50         return 0;
51     q->head = q->head->next;
52     if (!q->head)
53         q->tail = 0;
54     q->num--;
55     return r;
56 }
57
58 void request_initq(request_q *q)
59 {
60     q->head = q->tail = 0;
61     q->num = 0;
62 }
63
64 request *request_get(void)
65 {
66     request *r = request_list;
67
68     if (r)
69         request_list = r->next;
70     else
71     {
72         if (!(r = xmalloc(sizeof(*r))))
73             abort();
74         r->response = 0;
75         r->size_response = 0;
76     }
77     r->len_refid = 0;
78     r->request = 0;
79     r->request_mem = 0;
80     r->len_response = 0;
81     r->state = REQUEST_IDLE;
82     r->next = 0;
83     return r;
84 }
85
86 void request_release(request *r)
87 {
88     r->next = request_list;
89     request_list = r;
90 }