diff options
Diffstat (limited to 'src/til_stream.h')
-rw-r--r-- | src/til_stream.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/til_stream.h b/src/til_stream.h index 3e83c7d..3f0a618 100644 --- a/src/til_stream.h +++ b/src/til_stream.h @@ -32,8 +32,19 @@ typedef struct til_tap_t til_tap_t; */ typedef int (til_stream_iter_func_t)(void *context, til_stream_pipe_t *pipe, const void *owner, const void *owner_foo, const til_tap_t *driving_tap); +/* this provides a way to intercept pipe creations/deletions when they occur, + * allowing another module to snipe ownership when they appear and cleanup + * its resources when they disappear. + */ +typedef struct til_stream_hooks_t { + int (*pipe_ctor)(void *context, til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap, const void **res_owner, const void **res_owner_foo, const til_tap_t **res_tap); /* called immediately *before* pipe would be created by tap using these parameters, return <0 on error, 0 on unhandled by hook, 1 on handled with desired owner/owner_foo/tap stored in res_* */ + int (*pipe_dtor)(void *context, til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, const til_tap_t *tap); /* called immediately *after* pipe "destroyed" (withdrawn from stream) */ +} til_stream_hooks_t; + til_stream_t * til_stream_new(void); til_stream_t * til_stream_free(til_stream_t *stream); +int til_stream_set_hooks(til_stream_t *stream, const til_stream_hooks_t *hooks, void *context); +int til_stream_unset_hooks(til_stream_t *stream, const til_stream_hooks_t *hooks); /* bare interface for non-module-context owned taps */ int til_stream_tap(til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap); |