about summary refs log tree commit diff
path: root/malloc/arena.c
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-11-23 14:47:31 +0100
committerFlorian Weimer <fweimer@redhat.com>2017-11-23 14:47:31 +0100
commit0a947e061d47c9710838f210506215bd9533324b (patch)
tree7b794c6778f0b904909e87a560696799bbcd4e7d /malloc/arena.c
parent67f36c7922fe5053549ec9aa7f60ed2c5c2d65b4 (diff)
downloadglibc-0a947e061d47c9710838f210506215bd9533324b.tar.gz
glibc-0a947e061d47c9710838f210506215bd9533324b.tar.xz
glibc-0a947e061d47c9710838f210506215bd9533324b.zip
malloc: Call tcache destructor in arena_thread_freeres
It does not make sense to register separate cleanup functions for arena
and tcache since they're always going to be called together.  Call the
tcache cleanup function from within arena_thread_freeres since it at
least makes the order of those cleanups clear in the code.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Diffstat (limited to 'malloc/arena.c')
-rw-r--r--malloc/arena.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/malloc/arena.c b/malloc/arena.c
index 85b985e193..4d27e17c46 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -944,6 +944,11 @@ arena_get_retry (mstate ar_ptr, size_t bytes)
 static void __attribute__ ((section ("__libc_thread_freeres_fn")))
 arena_thread_freeres (void)
 {
+  /* Shut down the thread cache first.  This could deallocate data for
+     the thread arena, so do this before we put the arena on the free
+     list.  */
+  tcache_thread_shutdown ();
+
   mstate a = thread_arena;
   thread_arena = NULL;