summaryrefslogtreecommitdiffstats
path: root/lib/mqueue.h
diff options
context:
space:
mode:
authorpaulo <paul@bayleaf.org.uk>2009-12-18 14:37:29 +0000
committerpaulo <paul@bayleaf.org.uk>2009-12-18 14:37:29 +0000
commitbb48a82760858f94e7d2ce767ee61d98be2ee071 (patch)
tree5e49b11cfcbddb6c045da7b6c13942237f2c26fd /lib/mqueue.h
parent44fcadae86fa822ee40d08772584879acab73208 (diff)
downloadquagga-bb48a82760858f94e7d2ce767ee61d98be2ee071.tar.bz2
quagga-bb48a82760858f94e7d2ce767ee61d98be2ee071.tar.xz
Changes to mqueue interface to support revoke.
Diffstat (limited to 'lib/mqueue.h')
-rw-r--r--lib/mqueue.h80
1 files changed, 21 insertions, 59 deletions
diff --git a/lib/mqueue.h b/lib/mqueue.h
index 6fb519d4..7d649efe 100644
--- a/lib/mqueue.h
+++ b/lib/mqueue.h
@@ -48,7 +48,15 @@ typedef union
mqb_uint_t u ;
} mqb_arg_t ;
-typedef void mqueue_action(mqueue_block mqb) ;
+enum mqb_flag
+{
+ mqb_revoke = 0,
+ mqb_action = 1
+} ;
+
+typedef enum mqb_flag mqb_flag_t ;
+
+typedef void mqueue_action(mqueue_block mqb, mqb_flag_t flag) ;
struct mqueue_block
{
@@ -58,9 +66,7 @@ struct mqueue_block
mqb_flags_t flags ; /* for message handler */
- mqb_context_t context ; /* for message revoke */
-
- mqb_arg_t arg0 ; /* may be pointer or integer */
+ void* arg0 ; /* NB: used for specific revoke */
mqb_arg_t arg1 ; /* may be pointer or integer */
} ;
@@ -133,9 +139,7 @@ mqueue_thread_signal
mqueue_thread_signal_init(mqueue_thread_signal mqt, qpt_thread_t thread,
int signum) ;
mqueue_block
-mqb_init_new(mqueue_block mqb, mqueue_action action, mqb_context_t context) ;
-
-#define mqb_new(action, context) mqb_init_new(NULL, action, context)
+mqb_init_new(mqueue_block mqb, mqueue_action action, void* arg0) ;
void
mqb_free(mqueue_block mqb) ;
@@ -156,21 +160,15 @@ mqueue_done_waiting(mqueue_queue mq, mqueue_thread_signal mtsig) ;
*/
Inline void mqb_set_action(mqueue_block mqb, mqueue_action action) ;
-Inline void mqb_set_context(mqueue_block mqb, mqb_context_t context) ;
-Inline void mqb_set_arg0_p(mqueue_block mqb, mqb_ptr_t p) ;
-Inline void mqb_set_arg0_i(mqueue_block mqb, mqb_int_t i) ;
-Inline void mqb_set_arg0_u(mqueue_block mqb, mqb_uint_t u) ;
+Inline void mqb_set_arg0(mqueue_block mqb, void* p) ;
Inline void mqb_set_arg1_p(mqueue_block mqb, mqb_ptr_t p) ;
Inline void mqb_set_arg1_i(mqueue_block mqb, mqb_int_t i) ;
Inline void mqb_set_arg1_u(mqueue_block mqb, mqb_uint_t u) ;
-Inline void mqb_dispatch(mqueue_block mqb) ;
-Inline mqb_context_t mqb_qet_context(mqueue_block mqb) ;
+Inline void mqb_dispatch(mqueue_block mqb, mqb_flag_t flag) ;
-Inline mqb_ptr_t mqb_get_arg0_p(mqueue_block mqb) ;
-Inline mqb_int_t mqb_get_arg0_i(mqueue_block mqb) ;
-Inline mqb_uint_t mqb_get_arg0_u(mqueue_block mqb) ;
+Inline void* mqb_get_arg0(mqueue_block mqb) ;
Inline mqb_ptr_t mqb_get_arg1_p(mqueue_block mqb) ;
Inline mqb_int_t mqb_get_arg1_i(mqueue_block mqb) ;
Inline mqb_uint_t mqb_get_arg1_u(mqueue_block mqb) ;
@@ -188,27 +186,9 @@ mqb_set_action(mqueue_block mqb, mqueue_action action)
} ;
Inline void
-mqb_set_context(mqueue_block mqb, mqb_context_t context)
-{
- mqb->context = context ;
-} ;
-
-Inline void
-mqb_set_arg0_p(mqueue_block mqb, mqb_ptr_t p)
-{
- mqb->arg0.p = p ;
-} ;
-
-Inline void
-mqb_set_arg0_i(mqueue_block mqb, mqb_int_t i)
-{
- mqb->arg0.i = i ;
-} ;
-
-Inline void
-mqb_set_arg0_u(mqueue_block mqb, mqb_uint_t u)
+mqb_set_arg0(mqueue_block mqb, void* arg0)
{
- mqb->arg0.u = u ;
+ mqb->arg0 = arg0 ;
} ;
Inline void
@@ -232,33 +212,15 @@ mqb_set_arg1_u(mqueue_block mqb, mqb_uint_t u)
/* Get operations */
Inline void
-mqb_dispatch(mqueue_block mqb)
-{
- mqb->action(mqb) ;
-} ;
-
-Inline mqb_context_t
-mqb_qet_context(mqueue_block mqb)
+mqb_dispatch(mqueue_block mqb, mqb_flag_t flag)
{
- return mqb->context ;
+ mqb->action(mqb, flag) ;
} ;
-Inline mqb_ptr_t
-mqb_get_arg0_p(mqueue_block mqb)
-{
- return mqb->arg0.p ;
-} ;
-
-Inline mqb_int_t
-mqb_get_arg0_i(mqueue_block mqb)
-{
- return mqb->arg0.i ;
-} ;
-
-Inline mqb_uint_t
-mqb_get_arg0_u(mqueue_block mqb)
+Inline void*
+mqb_get_arg0(mqueue_block mqb)
{
- return mqb->arg0.u ;
+ return mqb->arg0 ;
} ;
Inline mqb_ptr_t