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