Delay pthread_atfork registering.

This function causes recursive allocation on LinuxThreads.

Signed-off-by: Crestez Dan Leonard <lcrestez@ixiacom.com>
This commit is contained in:
Leonard Crestez 2013-10-22 00:11:09 +03:00 committed by Jason Evans
parent 93f39f8d23
commit ac4403cacb

View File

@ -695,17 +695,6 @@ malloc_init_hard(void)
malloc_conf_init(); malloc_conf_init();
#if (!defined(JEMALLOC_MUTEX_INIT_CB) && !defined(JEMALLOC_ZONE) \
&& !defined(_WIN32))
/* Register fork handlers. */
if (pthread_atfork(jemalloc_prefork, jemalloc_postfork_parent,
jemalloc_postfork_child) != 0) {
malloc_write("<jemalloc>: Error in pthread_atfork()\n");
if (opt_abort)
abort();
}
#endif
if (opt_stats_print) { if (opt_stats_print) {
/* Print statistics at exit. */ /* Print statistics at exit. */
if (atexit(stats_print_atexit) != 0) { if (atexit(stats_print_atexit) != 0) {
@ -794,9 +783,25 @@ malloc_init_hard(void)
return (true); return (true);
} }
/* Get number of CPUs. */
malloc_mutex_unlock(&init_lock); malloc_mutex_unlock(&init_lock);
/**********************************************************************/
/* Recursive allocation may follow. */
ncpus = malloc_ncpus(); ncpus = malloc_ncpus();
#if (!defined(JEMALLOC_MUTEX_INIT_CB) && !defined(JEMALLOC_ZONE) \
&& !defined(_WIN32))
/* LinuxThreads's pthread_atfork() allocates. */
if (pthread_atfork(jemalloc_prefork, jemalloc_postfork_parent,
jemalloc_postfork_child) != 0) {
malloc_write("<jemalloc>: Error in pthread_atfork()\n");
if (opt_abort)
abort();
}
#endif
/* Done recursively allocating. */
/**********************************************************************/
malloc_mutex_lock(&init_lock); malloc_mutex_lock(&init_lock);
if (mutex_boot()) { if (mutex_boot()) {
@ -843,6 +848,7 @@ malloc_init_hard(void)
malloc_initialized = true; malloc_initialized = true;
malloc_mutex_unlock(&init_lock); malloc_mutex_unlock(&init_lock);
return (false); return (false);
} }