iv_event man page

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 boundaries.

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.

See Also

ivykis(3), iv_event_raw(3)

Referenced By

iv_event_raw(3), iv_thread(3), iv_wait(3).

IV_EVENT_INIT(3), iv_event_post(3), iv_event_register(3) and iv_event_unregister(3) are aliases of iv_event(3).

2010-09-03 ivykis programmer's manual