summaryrefslogtreecommitdiffstats
path: root/src/jemalloc.c
diff options
context:
space:
mode:
authorJason Evans <je@fb.com>2013-02-06 19:59:30 (GMT)
committerJason Evans <je@fb.com>2013-02-06 19:59:30 (GMT)
commit88c222c8e91499bf5d3fba53b24222df0cda5771 (patch)
treedb3dc10e4165fab7b4816b07fe7646a9ee219105 /src/jemalloc.c
parent06912756cccd0064a9c5c59992dbac1cec68ba3f (diff)
downloadjemalloc-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.c6
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();
}