[PATCH] malloc: Remove malloc hooks from fork handler

Florian Weimer fweimer@redhat.com
Fri Feb 19 16:32:00 GMT 2016


On 02/15/2016 06:07 PM, Torvald Riegel wrote:
> LGTM with one question.
> 
> On Wed, 2016-02-10 at 22:48 +0100, Florian Weimer wrote:
>> @@ -206,63 +137,30 @@ static unsigned int atfork_recursive_cntr;
>>  void
>>  __malloc_fork_lock_parent (void)
>>  {
>> -  mstate ar_ptr;
>> -
>>    if (__malloc_initialized < 1)
>>      return;
>>  
>>    /* We do not acquire free_list_lock here because we completely
>>       reconstruct free_list in __malloc_fork_unlock_child.  */
>>  
>> -  if (mutex_trylock (&list_lock))
>> -    {
>> -      if (thread_arena == ATFORK_ARENA_PTR)
>> -        /* This is the same thread which already locks the global list.
>> -           Just bump the counter.  */
>> -        goto out;
>> +  (void) mutex_lock (&list_lock);
> 
> Is it obvious why the recursive case that the previous code tried to
> handle can't happen anymore?  If not, a comment might be useful.

I think it is obvious with the previous change (which runs the fork
handler as late as possible).

The opposite was actually true—it's hard to see why the recursive lock
was ever needed because the need depended on fork handler ordering.

Thanks,
Florian



More information about the Libc-alpha mailing list