FYI, sporadic failure of rt/tst-timer-sigmask

Adhemerval Zanella adhemerval.zanella@linaro.org
Tue May 12 14:35:48 GMT 2020



On 12/05/2020 11:34, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> I could reproduce the issue by simulating some CPU load and i think the
>> issue in fact related to Florian's b3cae39dcbf patch.
>>
>> The issue is the SIGTIMER is being received between pthread_create signal 
>> unblocking after thread creation (nptl/pthread_create.c:418) and before 
>> the timer helper thread blocks the SIGTIMER (timer_routines.c:144).  
>> Since SIGTIMER is the same as SIGCANCEL, the sigcancel handler is triggered
>> and it ignores the timer (the test sets a once-online timer to be triggered 
>> in 0.001s).
>>
>> However it should not happen because the timer helper thread explicit
>> masks off SIGTIMER/SIGCANCEL (timer_routines.c:146) on timer_helper_thread
>> and it handles cancellation explicitly (timer_routines.c:109).
>>
>> This happen because on the mask it is restored by pthread_create.c
>> after (nptl/pthread_create.c:418) the SIGCANCEL is explicitly added
>> (nptl/pthread_create.c:772) even though the original signal mask has
>> is explicit disabled (timer_routines.c:146).
>>
>> So we need a way to keep the SIGTIMER/SIGCANCEL masked on the 
>> POSIX timer helper thread.
> 
> Nice analysis.  I agree with it.  This interaction did not occur to me
> when writing the pthread_create changes.
> 
> I think I have a fix.  I'll post it once it builds. 8-)

Alright, thanks.


More information about the Libc-alpha mailing list