X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvcl%2Fvcl_event.c;h=f6e20de27690e318e563119e7745aed3a2a7e0f3;hb=refs%2Fchanges%2F90%2F10990%2F9;hp=65d28707607ae8ce67c81a2f29d935895b319fdd;hpb=00f44cc1f7f3cc10c0d6b147c0bceb831a9e97fb;p=vpp.git diff --git a/src/vcl/vcl_event.c b/src/vcl/vcl_event.c index 65d28707607..f6e20de2769 100644 --- a/src/vcl/vcl_event.c +++ b/src/vcl/vcl_event.c @@ -79,9 +79,24 @@ vce_get_event_from_index(vce_event_thread_t *evt, u32 ev_idx) return ev; } +vce_event_handler_reg_t * +vce_get_event_handler (vce_event_thread_t *evt, vce_event_key_t *evk) +{ + vce_event_handler_reg_t *handler = 0; + uword *p; + + clib_spinlock_lock (&evt->handlers_lockp); + p = hash_get (evt->handlers_index_by_event_key, evk->as_u64); + if (p) + handler = pool_elt_at_index (evt->vce_event_handlers, p[0]); + clib_spinlock_unlock (&evt->handlers_lockp); + + return handler; +} + vce_event_handler_reg_t * vce_register_handler (vce_event_thread_t *evt, vce_event_key_t *evk, - vce_event_callback_t cb) + vce_event_callback_t cb, void *cb_args) { vce_event_handler_reg_t *handler; vce_event_handler_reg_t *old_handler = 0; @@ -120,6 +135,7 @@ vce_register_handler (vce_event_thread_t *evt, vce_event_key_t *evk, handler->replaced_handler_idx = (p) ? p[0] : ~0; handler->ev_idx = ~0; //This will be set by the event thread if event happens handler->evk = evk->as_u64; + handler->handler_fn_args = cb_args; hash_set (evt->handlers_index_by_event_key, evk->as_u64, handler_index); @@ -260,4 +276,4 @@ vce_start_event_thread (vce_event_thread_t *evt, u8 max_events) return pthread_create (&(evt->thread), NULL /* attr */ , vce_event_thread_fn, evt); -} \ No newline at end of file +}