malloc: Use _int_free_chunk in tcache_thread_shutdown
Florian Weimer
fweimer@redhat.com
Mon Sep 1 06:09:07 GMT 2025
* Wilco Dijkstra:
> Directly call _int_free_chunk during tcache shutdown to avoid
> possible recursion.
>
> Passes regress, OK for commit?
>
> ---
>
> diff --git a/malloc/malloc.c b/malloc/malloc.c
> index 6c02af5a271d21a40cfe199d118dd7e7ad886ed5..943d5afd821e78d3f5d702bdc6fdc5caf21262fb 100644
> --- a/malloc/malloc.c
> +++ b/malloc/malloc.c
> @@ -3346,6 +3346,7 @@ static void
> tcache_thread_shutdown (void)
> {
> int i;
> + mchunkptr p;
> tcache_perthread_struct *tcache_tmp = tcache;
>
> tcache_shutting_down = true;
> @@ -3367,11 +3368,14 @@ tcache_thread_shutdown (void)
> malloc_printerr ("tcache_thread_shutdown(): "
> "unaligned tcache chunk detected");
> tcache_tmp->entries[i] = REVEAL_PTR (e->next);
> - __libc_free (e);
> + e->key = 0;
> + p = mem2chunk (e);
> + _int_free_chunk (arena_for_chunk (p), p, chunksize (p), 0);
> }
> }
>
> - __libc_free (tcache_tmp);
> + p = mem2chunk (tcache_tmp);
> + _int_free_chunk (arena_for_chunk (p), p, chunksize (p), 0);
> }
>
> /* Initialize tcache. In the rare case there isn't any memory available,
Does this mean we can eliminate tcache_shutting_down?
Thanks,
Florian
More information about the Libc-alpha
mailing list