From: Timo Sirainen Date: Thu, 5 Sep 2019 08:59:20 +0000 (+0300) Subject: lib: Add EVENT_CALLBACK_TYPE_CREATE to call a callback on event creation X-Git-Tag: 2.3.9~170 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fb2ad3ce1be266b3930dc462461939e7830eb4a7;p=thirdparty%2Fdovecot%2Fcore.git lib: Add EVENT_CALLBACK_TYPE_CREATE to call a callback on event creation It's not called for event_dup() or event_flatten(), because those are based on events that were already created. --- diff --git a/src/lib-master/stats-client.c b/src/lib-master/stats-client.c index 9c340fc2ee..281b876b09 100644 --- a/src/lib-master/stats-client.c +++ b/src/lib-master/stats-client.c @@ -226,6 +226,8 @@ stats_event_callback(struct event *event, enum event_callback_type type, return TRUE; switch (type) { + case EVENT_CALLBACK_TYPE_CREATE: + break; case EVENT_CALLBACK_TYPE_SEND: stats_client_send_event(client, event, ctx); break; diff --git a/src/lib/lib-event-private.h b/src/lib/lib-event-private.h index 175f19c3e5..e61168d9f7 100644 --- a/src/lib/lib-event-private.h +++ b/src/lib/lib-event-private.h @@ -43,6 +43,8 @@ struct event { }; enum event_callback_type { + /* Event was just created */ + EVENT_CALLBACK_TYPE_CREATE, /* Event is being sent */ EVENT_CALLBACK_TYPE_SEND, /* Event is being freed */ @@ -72,7 +74,7 @@ struct event_category *event_category_find_registered(const char *name); struct event_category *const * event_get_registered_categories(unsigned int *count_r); -/* Register callback to be called whenever events are sent. */ +/* Register callback to be called for event's different states. */ void event_register_callback(event_callback_t *callback); void event_unregister_callback(event_callback_t *callback); diff --git a/src/lib/lib-event.c b/src/lib/lib-event.c index f2c8add811..aa08e46364 100644 --- a/src/lib/lib-event.c +++ b/src/lib/lib-event.c @@ -346,7 +346,11 @@ event_create_internal(struct event *parent, const char *source_filename, struct event *event_create(struct event *parent, const char *source_filename, unsigned int source_linenum) { - return event_create_internal(parent, source_filename, source_linenum); + struct event *event; + + event = event_create_internal(parent, source_filename, source_linenum); + (void)event_call_callbacks_noargs(event, EVENT_CALLBACK_TYPE_CREATE); + return event; } #undef event_create_passthrough