DragonFly On-Line Manual Pages
iv_event(3) ivykis programmer's manual iv_event(3)
NAME
IV_EVENT_INIT, iv_event_register, iv_event_unregister, iv_event_post -
manage ivykis objects for event notification
SYNOPSIS
#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);
DESCRIPTION
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)
ivykis 2010-09-03 iv_event(3)