6 #include <forb/basic_types.h>
7 #include <forb/syncobj.h>
8 #include <ul_gavlcust.h>
9 #include <forb/forb-internal.h>
12 * Helper structure for sending ORB requests.
14 * It is allocated in stub's stack.
18 CORBA_unsigned_long request_id;
19 CDR_Codec cdr_request;
23 struct forb_env *env; /**< Where to store exception returned in reply */
24 forb_syncobj_t reply_ready; /**< Synchronization object for waiting for reply */
25 forb_syncobj_t *reply_processed; /**< Synchronization object for receiver thread to wait for stub. */
28 typedef struct forb_request forb_request_t;
30 /* Declaration of AVL tree for storing sent requests. */
31 GAVL_CUST_NODE_INT_DEC(forb_request_nolock /* cust_prefix */,
32 forb_t /* cust_root_t */,
33 forb_request_t /* cust_item_t */,
34 CORBA_unsigned_long /* cust_key_t */,
35 requests /* cust_root_node */,
36 node /* cust_item_node */,
37 request_id /* cust_item_key */,
38 forb_request_cmp/* cust_cmp_fnc */);
41 forb_request_insert(forb_t *forb, forb_request_t *req)
44 fosa_mutex_lock(&forb->request_mutex);
45 ret = forb_request_nolock_insert(forb, req);
46 fosa_mutex_unlock(&forb->request_mutex);
51 forb_request_delete(forb_t *forb, forb_request_t *req)
53 fosa_mutex_lock(&forb->request_mutex);
54 forb_request_nolock_delete(forb, req);
55 fosa_mutex_unlock(&forb->request_mutex);
58 static inline forb_request_t *
59 forb_request_find(forb_t *forb, CORBA_unsigned_long *request_id)
62 fosa_mutex_lock(&forb->request_mutex);
63 ret = forb_request_nolock_find(forb, request_id);
64 fosa_mutex_unlock(&forb->request_mutex);
69 forb_request_init(forb_request_t *req, forb_object obj);
71 forb_request_destroy(forb_request_t *req);
73 forb_request_wait_for_reply(forb_request_t *req);
75 forb_request_signal_processed(forb_request_t *req);
77 forb_request_send(forb_request_t *req, CORBA_Environment *env);