iv_event provides a way for delivering events to
recipients across thread boundaries.
The intended event recipient calls
IV_EVENT_INIT on a
struct iv_event object, fills in
->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 is implemented as a wrapper around
and multiplexes multiple
struct iv_event objects over per-thread
struct iv_event_raw objects, to save file descriptors and kernel resources.