HomeFreeBSD

Return success, instead of ESRCH, from pthread_cancel(3) applied to the

Description

Return success, instead of ESRCH, from pthread_cancel(3) applied to the
exited but not yet joined thread.

Before, if the thread exited but was not yet joined, we returned
ESRCH.

According to IEEE Std 1003.1™-2017 recommendation in the
description of pthread_cancel(3):

If an implementation detects use of a thread ID after the end of its
lifetime, it is recommended that the function should fail and report
an [ESRCH] error.

So it seems desirable to not return ESRCH until the lifetime of the
thread ID ends. According to the section 2.9.2 Thread IDs,

The lifetime of a thread ID ends after the thread terminates if it
was created with the detachstate attribute set to
PTHREAD_CREATE_DETACHED or if pthread_detach() or pthread_join()
has been called for that thread.

In other words, lifetime for thread ID of exited but not yet joined thread
did not ended yet.

Prompted by: cperciva
Sponsored by: The FreeBSD Foundation
MFC after: 1 week

Details

Provenance
kibAuthored on
Parents
rS357893: Fix handling of WAITFAIL in vm_page_grab() and vm_page_grab_pages().
Branches
Unknown
Tags
Unknown