[PATCH v8] linux: Do not spawn a new thread for SIGEV_THREAD (BZ 30558, 27895, 29705, 32833)

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Wed Jul 8 19:45:46 GMT 2026



On 08/07/26 15:05, Carlos O'Donell wrote:
> On 7/7/26 11:59 AM, Adhemerval Zanella wrote:
>> The current timer_create SIGEV_THREAD implementation has some
>> downsides:
> 
> Test rt/tst-timer8.c fails if pause() is removed indicating something is
> wrong with the asynchronous cancellation.
> 
> Note that pause() should be removed because it's a cancellation point
> which causes the thread to test for cancellation, and it will see the
> bits set by pthread_cancel and cancel.
> 
> I don't know why the newe implementation fails to cancel the thread, I just
> know that without pause it should still cancel but doesn't.
It is because the test is built with -fexception and gcc gives the notification
function a DWARF/LSDA unwind whose cleanup actions exist only at call sites.
Asynchronous cancellation that interrupts a PC not inside any call-site region
finds no landing pad there (the while (1)), so the personality routine performs 
no cleanup for that frame (the on_cancel registered with pthread_cleanup_push)
and the unwind proceeds straight to thread termination.

And as you noted privately the sem_post called by on_cancel is strictly UB,
I will change to use a different synchronization mechanism to check whether
the cancellation was acted upon.


More information about the Libc-alpha mailing list