diff options
Diffstat (limited to 'nptl/pthread_cancel.c')
-rw-r--r-- | nptl/pthread_cancel.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/nptl/pthread_cancel.c b/nptl/pthread_cancel.c index 2bb523c0ec..a8aa3b3d15 100644 --- a/nptl/pthread_cancel.c +++ b/nptl/pthread_cancel.c @@ -61,10 +61,11 @@ __pthread_cancel (pthread_t th) { volatile struct pthread *pd = (volatile struct pthread *) th; - /* Make sure the descriptor is valid. */ - if (INVALID_TD_P (pd)) - /* Not a valid thread handle. */ - return ESRCH; + if (pd->tid == 0) + /* The thread has already exited on the kernel side. Its outcome + (regular exit, other cancelation) has already been + determined. */ + return 0; static int init_sigcancel = 0; if (atomic_load_relaxed (&init_sigcancel) == 0) |