[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