From 3a0cdc05a5b8ccdefad8e8a402403f50f491ed29 Mon Sep 17 00:00:00 2001 From: David Chisnall Date: Mon, 8 Jul 2019 19:24:56 +0100 Subject: [PATCH] Fix on macOS. Fixes an issue where the global placeholder allocator was being released. --- src/mem/threadalloc.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/mem/threadalloc.h b/src/mem/threadalloc.h index ede455d..4ac6708 100644 --- a/src/mem/threadalloc.h +++ b/src/mem/threadalloc.h @@ -125,7 +125,11 @@ namespace snmalloc */ ~ThreadAllocThreadDestructor() { - current_alloc_pool()->release(alloc); + if (alloc != &GlobalPlaceHolder) + { + current_alloc_pool()->release(alloc); + alloc = &GlobalPlaceHolder; + } } public: @@ -172,8 +176,11 @@ namespace snmalloc *pp = nullptr; // Actually destroy the allocator and reset TLS Alloc*& alloc = ThreadAllocExplicitTLSCleanup::get(); - current_alloc_pool()->release(alloc); - alloc = &GlobalPlaceHolder; + if (alloc != &GlobalPlaceHolder) + { + current_alloc_pool()->release(alloc); + alloc = &GlobalPlaceHolder; + } } # ifdef _WIN32 @@ -314,6 +321,7 @@ namespace snmalloc return local_alloc; } local_alloc = current_alloc_pool()->acquire(); + assert(local_alloc != &GlobalPlaceHolder); ThreadAlloc::register_cleanup(); return local_alloc; }