Rx: Permit MakeDebugCall() be be compiled when RXDEBUG is undefined
[openafs.git] / src / rx / rx_multi.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef _RX_MULTI_
11 #define _RX_MULTI_
12
13 struct multi_handle {
14     int nConns;
15     struct rx_call **calls;
16     short *ready;
17     short nReady;               /* XXX UNALIGNED */
18     short *nextReady;
19     short *firstNotReady;
20 #ifdef RX_ENABLE_LOCKS
21     afs_kmutex_t lock;
22     afs_kcondvar_t cv;
23 #endif                          /* RX_ENABLE_LOCKS */
24 };
25
26 #define multi_Rx(conns, nConns) \
27     do {\
28         struct multi_handle *multi_h;\
29         int multi_i;\
30         struct rx_call *multi_call;\
31         multi_h = multi_Init(conns, nConns);\
32         for (multi_i = 0; multi_i < nConns; multi_i++)
33
34 #define multi_Body(startProc, endProc)\
35         multi_call = multi_h->calls[multi_i];\
36         startProc;\
37         rx_FlushWrite(multi_call);\
38         }\
39         while ((multi_i = multi_Select(multi_h)) >= 0) {\
40             afs_int32 multi_error;\
41             multi_call = multi_h->calls[multi_i];\
42             multi_error = rx_EndCall(multi_call, endProc);\
43             multi_h->calls[multi_i] = (struct rx_call *) 0
44
45 #define multi_Abort break
46
47 #define multi_End\
48         multi_Finalize(multi_h);\
49     } while (0)
50
51 /* Ignore remaining multi RPC's */
52 #define multi_End_Ignore\
53         multi_Finalize_Ignore(multi_h);\
54     } while (0)
55
56 #endif /* _RX_MULTI_     End of rx_multi.h */