#include <geom/geom.h> int
g_post_event (g_event_t *func void *arg int flag ...); int
g_waitfor_event (g_event_t *func void *arg int flag ...); void
g_cancel_event (void *ref);
DESCRIPTION
The GEOM framework has its own event queue to inform classes about important
events.
The event queue can be also used by GEOM classes themselves, for example
to work around some restrictions in the I/O path, where sleeping, heavy weight
tasks, etc. are not permitted.
The
g_post_event ();
function tells the GEOM framework to call function
Fa func
with argument
Fa arg
from the event queue.
The
Fa flag
argument is passed to
malloc(9)
for memory allocations inside of
g_post_event (.);
The only allowed flags are
M_WAITOK
and
M_NOWAIT
The rest of the arguments are used as references to identify the event.
An event can be canceled by using any of the given references as an
argument to
g_cancel_event (.);
The list of references has to end with a
NULL
value.
The
g_waitfor_event ();
function is a blocking version of the
g_post_event ();
function.
It waits until the event is finished or canceled and then returns.
The
g_cancel_event ();
function cancels all event(s) identified by
Fa ref .
Cancellation is equivalent to calling the requested function
with requested arguments and argument
Fa flag
set to
EV_CANCEL
RESTRICTIONS/CONDITIONS
g_post_event (:);
The argument
Fa flag
has to be
M_WAITOK
or
M_NOWAIT
The list of references has to end with a
NULL
value.
g_waitfor_event (:);
The argument
Fa flag
has to be
M_WAITOK
or
M_NOWAIT
The list of references has to end with a
NULL
value.
The
g_waitfor_event ();
function cannot be called from an event, since doing so would result
in a deadlock.
RETURN VALUES
The
g_post_event ();
and
g_waitfor_event ();
functions
return 0 if successful; otherwise an error code is returned.
EXAMPLES
Example of a function called from the event queue.
void
example_event(void *arg, int flag)
{
if (flag == EV_CANCEL) {
printf("Event with argument %p canceled.\n", arg);
return;
}
printf("Event with argument %p called.\n", arg);
}
ERRORS
Possible errors for the
g_post_event ();
function:
Bq Er ENOMEM
The
Fa flag
argument was set to
M_NOWAIT
and there was insufficient memory.
Possible errors for the
g_waitfor_event ();
function:
Bq Er EAGAIN
The event was canceled.
Bq Er ENOMEM
The
Fa flag
argument was set to
M_NOWAIT
and there was insufficient memory.