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

Florian Weimer fweimer@redhat.com
Tue May 12 14:34:34 GMT 2020


* 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-)

Thanks,
Florian



More information about the Libc-alpha mailing list