globus_common  17.9
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
globus_i_callback.h
1 
2 #ifndef GLOBUS_I_CALLBACK_H
3 #define GLOBUS_I_CALLBACK_H
4 
5 #include "globus_error.h"
6 #include "globus_error_generic.h"
7 
8 extern globus_module_descriptor_t globus_i_callback_module_nonthreaded;
9 extern globus_module_descriptor_t globus_i_callback_module_threaded;
10 
11 #define GLOBUS_CALLBACK_NONTHREADED_MODULE (&globus_i_callback_module_nonthreaded)
12 #define GLOBUS_CALLBACK_THREADED_MODULE (&globus_i_callback_module_threaded)
13 /* common error objects */
14 
15 #define GLOBUS_L_CALLBACK_CONSTRUCT_INVALID_CALLBACK_HANDLE(func) \
16  globus_error_put( \
17  globus_error_construct_error( \
18  GLOBUS_CALLBACK_MODULE, \
19  GLOBUS_NULL, \
20  GLOBUS_CALLBACK_ERROR_INVALID_CALLBACK_HANDLE, \
21  __FILE__, \
22  (func), \
23  __LINE__, \
24  "Invalid callback handle"))
25 
26 #define GLOBUS_L_CALLBACK_CONSTRUCT_INVALID_SPACE(func) \
27  globus_error_put( \
28  globus_error_construct_error( \
29  GLOBUS_CALLBACK_MODULE, \
30  GLOBUS_NULL, \
31  GLOBUS_CALLBACK_ERROR_INVALID_SPACE, \
32  __FILE__, \
33  (func), \
34  __LINE__, \
35  "Invalid space handle"))
36 
37 #define GLOBUS_L_CALLBACK_CONSTRUCT_MEMORY_ALLOC(func, alloc) \
38  globus_error_put( \
39  globus_error_construct_error( \
40  GLOBUS_CALLBACK_MODULE, \
41  GLOBUS_NULL, \
42  GLOBUS_CALLBACK_ERROR_MEMORY_ALLOC, \
43  __FILE__, \
44  (func), \
45  __LINE__, \
46  "Could not allocate memory for %s", \
47  (alloc)))
48 
49 #define GLOBUS_L_CALLBACK_CONSTRUCT_INVALID_ARGUMENT(func, argument) \
50  globus_error_put( \
51  globus_error_construct_error( \
52  GLOBUS_CALLBACK_MODULE, \
53  GLOBUS_NULL, \
54  GLOBUS_CALLBACK_ERROR_INVALID_ARGUMENT, \
55  __FILE__, \
56  (func), \
57  __LINE__, \
58  "Invalid argument: %s", \
59  (argument)))
60 
61 #define GLOBUS_L_CALLBACK_CONSTRUCT_ALREADY_CANCELED(func) \
62  globus_error_put( \
63  globus_error_construct_error( \
64  GLOBUS_CALLBACK_MODULE, \
65  GLOBUS_NULL, \
66  GLOBUS_CALLBACK_ERROR_ALREADY_CANCELED, \
67  __FILE__, \
68  (func), \
69  __LINE__, \
70  "Callback previoulsy unregistered"))
71 
72 #define GLOBUS_L_CALLBACK_CONSTRUCT_NO_ACTIVE_CALLBACK(func) \
73  globus_error_put( \
74  globus_error_construct_error( \
75  GLOBUS_CALLBACK_MODULE, \
76  GLOBUS_NULL, \
77  GLOBUS_CALLBACK_ERROR_NO_ACTIVE_CALLBACK, \
78  __FILE__, \
79  (func), \
80  __LINE__, \
81  "No cuurently running callback"))
82 
83 #define GlobusICallbackReadyInit(queue) \
84  do { \
85  (queue)->head = GLOBUS_NULL; \
86  (queue)->tail = &(queue)->head; \
87  } while(0)
88 
89 #define GlobusICallbackReadyEnqueue(queue, callback_info) \
90  do { \
91  (callback_info)->next = GLOBUS_NULL; \
92  *(queue)->tail = callback_info; \
93  (queue)->tail = &callback_info->next; \
94  } while(0)
95 
96 #define GlobusICallbackReadyEnqueueFirst(queue, callback_info) \
97  do { \
98  (callback_info)->next = (queue)->head; \
99  if(!(queue)->head) \
100  { \
101  (queue)->tail = &callback_info->next; \
102  } \
103  (queue)->head = (callback_info); \
104  } while(0)
105 
106 #define GlobusICallbackReadyDequeue(queue, callback_info) \
107  do { \
108  (callback_info) = (queue)->head; \
109  if((callback_info)) \
110  { \
111  (queue)->head = (callback_info)->next; \
112  if(!(queue)->head) \
113  { \
114  (queue)->tail = &(queue)->head; \
115  } \
116  } \
117  } while(0)
118 
119 #define GlobusICallbackReadyPeak(queue, callback_info) \
120  do { \
121  (callback_info) = (queue)->head; \
122  } while(0)
123 
124 #define GlobusICallbackReadyRemove(queue, callback_info) \
125  do { \
126  globus_l_callback_info_t ** tmp; \
127  \
128  tmp = &(queue)->head; \
129  while(*tmp && *tmp != (callback_info)) \
130  { \
131  tmp = &(*tmp)->next; \
132  } \
133  \
134  if(*tmp) \
135  { \
136  if(!(callback_info)->next) \
137  { \
138  (queue)->tail = tmp; \
139  } \
140  *tmp = (*tmp)->next; \
141  } \
142  } while(0)
143 
144 #endif /* GLOBUS_I_CALLBACK_H */
Globus Error Handling.
Globus Error API.
Module Descriptor.
Definition: globus_module.h:54