trace2: destroy context stored in thread-local storage

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>

Patrick Steinhardt committed Sep 26, 2024 at 13:46 UTC 64d9adafba5b3024414760838d9d81f68738e813
1 file changed +9 -1
trace2/tr2_tls.c
+9 -1
@@ -152,11 +152,19 @@ uint64_t tr2tls_absolute_elapsed(uint64_t us)
152 return us - tr2tls_us_start_process;
153 }
154
155 +static void tr2tls_key_destructor(void *payload)
156 +{
157 + struct tr2tls_thread_ctx *ctx = payload;
158 + free((char *)ctx->thread_name);
159 + free(ctx->array_us_start);
160 + free(ctx);
161 +}
162 +
163 void tr2tls_init(void)
164 {
165 tr2tls_start_process_clock();
166
159 - pthread_key_create(&tr2tls_key, NULL);
167 + pthread_key_create(&tr2tls_key, tr2tls_key_destructor);
168 init_recursive_mutex(&tr2tls_mutex);
169
170 tr2tls_thread_main =