From 299bd6d414bc1d019c830f1642692252586a6711 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 23 Oct 2018 16:28:54 -0400 Subject: [PATCH] add missing thread unseal / seal for atfork hooks --- malloc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/malloc.c b/malloc.c index 4bc534c..4057dbb 100644 --- a/malloc.c +++ b/malloc.c @@ -757,20 +757,25 @@ static void regions_delete(struct region_metadata *region) { } static void full_lock(void) { + thread_unseal_metadata(); mutex_lock(&ro.region_allocator->lock); for (unsigned class = 0; class < N_SIZE_CLASSES; class++) { mutex_lock(&ro.size_class_metadata[class].lock); } + thread_seal_metadata(); } static void full_unlock(void) { + thread_unseal_metadata(); mutex_unlock(&ro.region_allocator->lock); for (unsigned class = 0; class < N_SIZE_CLASSES; class++) { mutex_unlock(&ro.size_class_metadata[class].lock); } + thread_seal_metadata(); } static void post_fork_child(void) { + thread_unseal_metadata(); mutex_init(&ro.region_allocator->lock); random_state_init(&ro.region_allocator->rng); for (unsigned class = 0; class < N_SIZE_CLASSES; class++) { @@ -778,6 +783,7 @@ static void post_fork_child(void) { mutex_init(&c->lock); random_state_init(&c->rng); } + thread_seal_metadata(); } static inline bool is_init(void) {