diff options
| author | joerg <joerg@NetBSD.org> | 2020-01-13 19:14:37 +0000 |
|---|---|---|
| committer | joerg <joerg@NetBSD.org> | 2020-01-13 19:14:37 +0000 |
| commit | baedc30b633c883fcd1593560d2dd3fa776888d8 (patch) | |
| tree | ca0b625fe8b15e6ee9dc09629547332ba44777e7 /lib/libc/stdlib | |
| parent | 87d491cfa0f9da5b472a0b3b968d19c5ee980d60 (diff) | |
Fix atfork malloc handling to include all the locks in old jemalloc.
Diffstat (limited to 'lib/libc/stdlib')
| -rw-r--r-- | lib/libc/stdlib/jemalloc.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/libc/stdlib/jemalloc.c b/lib/libc/stdlib/jemalloc.c index a2694e5feb6..836a23110e6 100644 --- a/lib/libc/stdlib/jemalloc.c +++ b/lib/libc/stdlib/jemalloc.c @@ -1,4 +1,4 @@ -/* $NetBSD: jemalloc.c,v 1.47 2020/01/13 19:14:02 joerg Exp $ */ +/* $NetBSD: jemalloc.c,v 1.48 2020/01/13 19:14:37 joerg Exp $ */ /*- * Copyright (C) 2006,2007 Jason Evans <jasone@FreeBSD.org>. @@ -118,7 +118,7 @@ #include <sys/cdefs.h> /* __FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.147 2007/06/15 22:00:16 jasone Exp $"); */ -__RCSID("$NetBSD: jemalloc.c,v 1.47 2020/01/13 19:14:02 joerg Exp $"); +__RCSID("$NetBSD: jemalloc.c,v 1.48 2020/01/13 19:14:37 joerg Exp $"); #ifdef __FreeBSD__ #include "libc_private.h" @@ -3986,16 +3986,17 @@ _malloc_prefork(void) unsigned i; /* Acquire all mutexes in a safe order. */ - + malloc_mutex_lock(&init_lock); malloc_mutex_lock(&arenas_mtx); for (i = 0; i < narenas; i++) { if (arenas[i] != NULL) malloc_mutex_lock(&arenas[i]->mtx); } - - malloc_mutex_lock(&base_mtx); - malloc_mutex_lock(&chunks_mtx); + malloc_mutex_lock(&base_mtx); +#ifdef USE_BRK + malloc_mutex_lock(&brk_mtx); +#endif } void @@ -4004,16 +4005,18 @@ _malloc_postfork(void) unsigned i; /* Release all mutexes, now that fork() has completed. */ - - malloc_mutex_unlock(&chunks_mtx); - +#ifdef USE_BRK + malloc_mutex_unlock(&brk_mtx); +#endif malloc_mutex_unlock(&base_mtx); + malloc_mutex_unlock(&chunks_mtx); - for (i = 0; i < narenas; i++) { + for (i = narenas; i-- > 0; ) { if (arenas[i] != NULL) malloc_mutex_unlock(&arenas[i]->mtx); } malloc_mutex_unlock(&arenas_mtx); + malloc_mutex_unlock(&init_lock); } /* |
