From 4f605823a49180f888c3adb72d6f9f4144293449 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 22 Sep 2021 12:14:08 +0300 Subject: [PATCH] lib: Add most data_stack_grow event fields before checking if event is wanted This allows using e.g. "event=data_stack_grow and alloc_size > 32768" as an event filter. --- src/lib/data-stack.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/lib/data-stack.c b/src/lib/data-stack.c index 70de38f396..1f68583ab2 100644 --- a/src/lib/data-stack.c +++ b/src/lib/data-stack.c @@ -405,12 +405,6 @@ static void data_stack_send_grow_event(size_t last_alloc_size) if (event_datastack == NULL) event_datastack = event_create(NULL); event_set_name(event_datastack, "data_stack_grow"); - if (!event_want_debug(event_datastack)) - return; - - const char *backtrace; - if (backtrace_get(&backtrace) == 0) - event_add_str(event_datastack, "backtrace", backtrace); event_add_int(event_datastack, "alloc_size", data_stack_get_alloc_size()); event_add_int(event_datastack, "used_size", data_stack_get_used_size()); event_add_int(event_datastack, "last_alloc_size", last_alloc_size); @@ -423,6 +417,20 @@ static void data_stack_send_grow_event(size_t last_alloc_size) #endif event_add_str(event_datastack, "frame_marker", current_frame->marker); + /* It's possible that the data stack gets grown and shrunk rapidly. + Try to avoid doing expensive work if the event isn't even used for + anything. Note that at this point all the event fields must be + set already that might potentially be used by the filters. */ + if (!event_want_debug(event_datastack)) + return; + + /* Getting backtrace is potentially inefficient, so do it after + checking if the event is wanted. Note that this prevents using the + backtrace field in event field comparisons. */ + const char *backtrace; + if (backtrace_get(&backtrace) == 0) + event_add_str(event_datastack, "backtrace", backtrace); + string_t *str = t_str_new(128); str_printfa(str, "total_used=%zu, total_alloc=%zu, last_alloc_size=%zu", data_stack_get_used_size(), -- 2.47.3