]> git.ipfire.org Git - thirdparty/git.git/commitdiff
trace2: destroy context stored in thread-local storage
authorPatrick Steinhardt <ps@pks.im>
Thu, 26 Sep 2024 11:46:45 +0000 (13:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 27 Sep 2024 15:25:36 +0000 (08:25 -0700)
Each thread may have a specific context in the trace2 subsystem that we
set up via thread-local storage. We do not set up a destructor for this
data though, which means that the context data will leak.

Plug this leak by installing a destructor. This leak is exposed by
t7814, but plugging it alone does not make the whole test suite pass.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
trace2/tr2_tls.c

index 4f75392952b6a429682d8989fe7146487ce0cb6a..7b023c1bfc65fa8524d46e15c2df7b1d57945da1 100644 (file)
@@ -152,11 +152,19 @@ uint64_t tr2tls_absolute_elapsed(uint64_t us)
        return us - tr2tls_us_start_process;
 }
 
+static void tr2tls_key_destructor(void *payload)
+{
+       struct tr2tls_thread_ctx *ctx = payload;
+       free((char *)ctx->thread_name);
+       free(ctx->array_us_start);
+       free(ctx);
+}
+
 void tr2tls_init(void)
 {
        tr2tls_start_process_clock();
 
-       pthread_key_create(&tr2tls_key, NULL);
+       pthread_key_create(&tr2tls_key, tr2tls_key_destructor);
        init_recursive_mutex(&tr2tls_mutex);
 
        tr2tls_thread_main =