struct utrace_engine — per-engine structure
struct utrace_engine { const struct utrace_engine_ops * ops; void * data; unsigned long flags; };
struct utrace_engine_ops pointer passed to utrace_attach_task
engine-private void * passed to utrace_attach_task
event mask set by utrace_set_events
plus internal flag bits
The task itself never has to worry about engines detaching while it's doing event callbacks. These structures are removed from the task's active list only when it's stopped, or by the task itself.
utrace_engine_get
and utrace_engine_put
maintain a reference count.
When it drops to zero, the structure is freed. One reference is held
implicitly while the engine is attached to its task.