On Thu, May 11, 2023 at 8:44 PM Florian Weimer <fwei...@redhat.com> wrote:
> Apparently, Hurd does not support async cancellation? Then
> __pthread_setcancelstate never has to unwind, so you just turn it into a
> non-weak symbol.

It does in theory, htl/pt-cancel.c has a PTHREAD_CANCEL_ASYNCHRONOUS
branch that calls into sysdeps/mach/hurd/htl/pt-docancel.c, which
manipulates the victim thread's state to make it call __pthread_exit
(0). (This is also implemented in a rather sad way that most likely
wouldn't work on x86_64-gnu; I'll get to fixing that some time...)

But it doesn't seem to either do any unwinding, nor is
__pthread_setcancelstate async-cancel-safe (it uses a mutex).

> If you need async cancellation support, the core cancellation routine
> could be made weak, so that it is linked into the executable only if
> pthread_cancel is ever called.

Could you please expand on how this all (unwinding, async
cancellation) is relevant? Clearly calling error () in a
PTHREAD_CANCEL_ASYNCHRONOUS context is undefined behavior since error
() is not async-cancel-safe.

Sergey

Reply via email to