[PATCH] malloc: Run fork handler as late as possible [BZ #19431]
Florian Weimer
fweimer@redhat.com
Tue May 10 13:55:00 GMT 2016
On 05/10/2016 03:41 PM, Tulio Magno Quites Machado Filho wrote:
> Hi Florian,
>
> Florian Weimer <fweimer@redhat.com> writes:
>
>> 2016-04-13 Florian Weimer <fweimer@redhat.com>
>>
>> [BZ #19431]
>> Run the malloc fork handler as late as possible to avoid deadlocks.
>> * malloc/malloc-internal.h: New file.
>> * malloc/malloc.c: Include it.
>> * malloc/arena.c (ATFORK_MEM): Remove.
>> (__malloc_fork_lock_parent): Rename from ptmalloc_lock_all.
>> Update comment.
>> (__malloc_fork_unlock_parent): Rename from ptmalloc_unlock_all.
>> (__malloc_fork_unlock_child): Rename from ptmalloc_unlock_all2.
>> Remove outdated comment.
>> (ptmalloc_init): Do not call thread_atfork. Remove
>> thread_atfork_static.
>> * malloc/tst-malloc-fork-deadlock.c: New file.
>> * Makefile (tests): Add tst-malloc-fork-deadlock.
>> (tst-malloc-fork-deadlock): Link against libpthread.
>> * manual/memory.texi (Aligned Memory Blocks): Update safety
>> annotation comments.
>> * sysdeps/nptl/fork.c (__libc_fork): Call
>> __malloc_fork_lock_parent, __malloc_fork_unlock_parent,
>> __malloc_fork_unlock_child.
>> * sysdeps/mach/hurd/fork.c (__fork): Likewise.
>
> Did you notice any intermittent on malloc/tst-mallocfork after this patch?
No, but we saw a failure once on i686 *before* this patch went in.
> The child is getting into a deadlock if the signal arrives before the parent
> is able to complete __malloc_fork_unlock_parent().
But this could have happened before as well, right?
Thanks,
Florian
More information about the Libc-alpha
mailing list