dead lock in forked child

Salvatore Sanfilippo antirez at gmail.com
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.

Cheers,
Salvatore

On Wed, Oct 10, 2012 at 12:36 AM, Jason Evans <jasone at canonware.com> 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:
>
> http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git;a=commitdiff;h=20f1fc95adb35ea63dc61f47f2b0ffbd37d39f32
>
> 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 canonware.com
> http://www.canonware.com/mailman/listinfo/jemalloc-discuss
>



-- 
Salvatore 'antirez' Sanfilippo
open source developer - VMware
http://invece.org

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