Provided by: libivykis-dev_0.36.2-1_amd64 bug


       IV_EVENT_INIT,  iv_event_register,  iv_event_unregister,  iv_event_post  -  manage  ivykis
       objects for event notification


       #include <iv_event.h>

       struct iv_event {
               void            *cookie;
               void            (*handler)(void *);

       int IV_EVENT_INIT(struct iv_event *this);
       int iv_event_register(struct iv_event *this);
       void iv_event_unregister(struct iv_event *this);
       void iv_event_post(struct iv_event *this);


       iv_event provides a way for  delivering  events  to  ivykis(3)  recipients  across  thread

       The  intended  event  recipient  calls IV_EVENT_INIT on a struct iv_event object, fills in
       ->cookie and ->handler, and then calls iv_event_register on the object.

       To generate an event, call iv_event_post on the  previously  initialized  struct  iv_event
       object.   This  will  cause the callback specified by ->handler to be called in the thread
       that the struct iv_event object was registered in, with ->cookie as its sole argument.

       To deinitialize a struct iv_event object, call iv_event_unregister from  the  same  thread
       that iv_event_register was called from on that object.

       It  is  permitted to unregister a struct iv_event object from any ivykis callback function
       in the thread it was registered in, including from a callback function triggered  by  this
       object,  and  it  is  permitted to free the memory corresponding to an unregistered object
       from its own callback function.

       iv_event_post can be called from the same thread that iv_event_register was  called  from,
       or from a different thread within the same process, but can not be called from a different
       process, and can not be called from signal handlers.  If you need this functionality, look
       at iv_event_raw(3).

       Internally,  iv_event  is implemented as a wrapper around iv_event_raw(3), and multiplexes
       multiple struct iv_event objects over per-thread struct iv_event_raw objects, to save file
       descriptors and kernel resources.


       ivykis(3), iv_event_raw(3)