diff options
author | Jason Evans <je@fb.com> | 2013-02-06 19:59:30 (GMT) |
---|---|---|
committer | Jason Evans <je@fb.com> | 2013-02-06 19:59:30 (GMT) |
commit | 88c222c8e91499bf5d3fba53b24222df0cda5771 (patch) | |
tree | db3dc10e4165fab7b4816b07fe7646a9ee219105 /src/jemalloc.c | |
parent | 06912756cccd0064a9c5c59992dbac1cec68ba3f (diff) | |
download | jemalloc-88c222c8e91499bf5d3fba53b24222df0cda5771.zip jemalloc-88c222c8e91499bf5d3fba53b24222df0cda5771.tar.gz jemalloc-88c222c8e91499bf5d3fba53b24222df0cda5771.tar.bz2 |
Fix a prof-related locking order bug.
Fix a locking order bug that could cause deadlock during fork if heap
profiling were enabled.
Diffstat (limited to 'src/jemalloc.c')
-rw-r--r-- | src/jemalloc.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/jemalloc.c b/src/jemalloc.c index 6f6464d..bc350ed 100644 --- a/src/jemalloc.c +++ b/src/jemalloc.c @@ -1753,12 +1753,12 @@ _malloc_prefork(void) /* Acquire all mutexes in a safe order. */ ctl_prefork(); + prof_prefork(); malloc_mutex_prefork(&arenas_lock); for (i = 0; i < narenas_total; i++) { if (arenas[i] != NULL) arena_prefork(arenas[i]); } - prof_prefork(); chunk_prefork(); base_prefork(); huge_prefork(); @@ -1784,12 +1784,12 @@ _malloc_postfork(void) huge_postfork_parent(); base_postfork_parent(); chunk_postfork_parent(); - prof_postfork_parent(); for (i = 0; i < narenas_total; i++) { if (arenas[i] != NULL) arena_postfork_parent(arenas[i]); } malloc_mutex_postfork_parent(&arenas_lock); + prof_postfork_parent(); ctl_postfork_parent(); } @@ -1804,12 +1804,12 @@ jemalloc_postfork_child(void) huge_postfork_child(); base_postfork_child(); chunk_postfork_child(); - prof_postfork_child(); for (i = 0; i < narenas_total; i++) { if (arenas[i] != NULL) arena_postfork_child(arenas[i]); } malloc_mutex_postfork_child(&arenas_lock); + prof_postfork_child(); ctl_postfork_child(); } |