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 func with argument arg from the event queue. The 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 ref. Cancellation is equivalent to calling the requested function with requested arguments and argument flag set to EV_CANCEL.