dead lock in forked child

Salvatore Sanfilippo antirez at
Tue Oct 9 15:41:36 PDT 2012

Thank you Jason, I think we'll merge the fix in the Redis 2.6 branch
that is currently in release candidate.


On Wed, Oct 10, 2012 at 12:36 AM, Jason Evans <jasone at> wrote:
> On Jun 1, 2012, at 11:31 AM, Jason Evans wrote:
> On May 25, 2012, at 2:02 AM, Jokea wrote:
> I've found that a forked child runs into dead lock in a multithreaded
> application.
> jemalloc calls pthread_atfork() during initialization, but the test program
> does no allocation in the main thread before forking, and it launches
> threads that race with it.  It appears that one of those threads gets part
> way through allocator initialization before the fork occurs, which leaves
> the allocator in an inconsistent state (init_lock locked, but initialization
> incomplete).  The simple workaround is to allocate something before forking.
> A general fix in jemalloc is messy at best.  The possibilities that come to
> mind are 1) intercepting pthread_create() (or all fork-like system calls)
> much as the lazy locking code in mutex.c does and forcing allocator
> initialization, or 2) using a library initializer (function specified via
> compiler attribute to be run during library load) to force allocator
> initialization.  Both of these approaches are somewhat fragile;
> dlsym(RTLD_NEXT, …) can break if other libraries play similar games, and
> library initializers don't run early enough to prevent all possible
> failures.  In any case, I'll make a note to experiment with (2).
> I just committed a fix for this bug:
> It turned out that there were also some mutex acquire/release calls missing
> in the prefork/postfork functions, but most applications would not have
> exercised the code necessary to cause related deadlocks.
> Jason
> _______________________________________________
> jemalloc-discuss mailing list
> jemalloc-discuss at

Salvatore 'antirez' Sanfilippo
open source developer - VMware

Beauty is more important in computing than anywhere else in technology
because software is so complicated. Beauty is the ultimate defence
against complexity.
       — David Gelernter

More information about the jemalloc-discuss mailing list