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]);
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]);
/* TODO - multiple handler support. For now we can replace
* and re-instate, which is useful for event recycling */
/* TODO - multiple handler support. For now we can replace
* and re-instate, which is useful for event recycling */
/* Signal event thread that a handler exists in case any
* recycled events requiring this handler are pending */
/* Signal event thread that a handler exists in case any
* recycled events requiring this handler are pending */
pthread_cond_init (&(handler->handler_cond), NULL);
pthread_mutex_init (&(handler->handler_lock), NULL);
pthread_cond_init (&(handler->handler_cond), NULL);
pthread_mutex_init (&(handler->handler_lock), NULL);
/* Signal event thread that a new handler exists in case any
* recycled events requiring this handler are pending */
/* Signal event thread that a new handler exists in case any
* recycled events requiring this handler are pending */
pthread_cond_destroy (&(handler->handler_cond));
pool_put (evt->vce_event_handlers, handler);
pthread_cond_destroy (&(handler->handler_cond));
pool_put (evt->vce_event_handlers, handler);
clib_fifo_sub1 (evt->event_index_fifo, ev_idx);
ev = vce_get_event_from_index (evt, ev_idx);
ASSERT(ev);
if (recycle_count && ev->recycle)
{
clib_fifo_add1 (evt->event_index_fifo, ev_idx);
clib_fifo_sub1 (evt->event_index_fifo, ev_idx);
ev = vce_get_event_from_index (evt, ev_idx);
ASSERT(ev);
if (recycle_count && ev->recycle)
{
clib_fifo_add1 (evt->event_index_fifo, ev_idx);
* does it make any sound?
* I don't know either, so lets biff the event */
pool_put(evt->vce_events, ev);
* does it make any sound?
* I don't know either, so lets biff the event */
pool_put(evt->vce_events, ev);
ev = vce_get_event_from_index (evt, ev_idx);
recycle_count += (!evt_recycle && ev && ev->recycle) ? 1 : 0;
ev = vce_get_event_from_index (evt, ev_idx);
recycle_count += (!evt_recycle && ev && ev->recycle) ? 1 : 0;