From 760bec0aa09d3c5d6260ec595a1158a587aebc3a Mon Sep 17 00:00:00 2001 From: deischen Date: Wed, 6 Mar 2002 19:28:41 +0000 Subject: Properly clear the status of a join operation if the joining thread is canceled or the joinee is detached. --- lib/libc_r/uthread/uthread_cancel.c | 1 + lib/libc_r/uthread/uthread_detach.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/libc_r') diff --git a/lib/libc_r/uthread/uthread_cancel.c b/lib/libc_r/uthread/uthread_cancel.c index 4c6ca98..cf72d89 100644 --- a/lib/libc_r/uthread/uthread_cancel.c +++ b/lib/libc_r/uthread/uthread_cancel.c @@ -70,6 +70,7 @@ _pthread_cancel(pthread_t pthread) if (pthread->join_status.thread != NULL) { pthread->join_status.thread->joiner = NULL; + pthread->join_status.thread = NULL; } pthread->cancelflags |= PTHREAD_CANCELLING; PTHREAD_NEW_STATE(pthread, PS_RUNNING); diff --git a/lib/libc_r/uthread/uthread_detach.c b/lib/libc_r/uthread/uthread_detach.c index b0e6fc4..298fdb4 100644 --- a/lib/libc_r/uthread/uthread_detach.c +++ b/lib/libc_r/uthread/uthread_detach.c @@ -66,7 +66,9 @@ _pthread_detach(pthread_t pthread) PTHREAD_NEW_STATE(joiner, PS_RUNNING); /* Set the return value for the woken thread: */ - joiner->error = ESRCH; + joiner->join_status.error = ESRCH; + joiner->join_status.ret = NULL; + joiner->join_status.thread = NULL; /* * Disconnect the joiner from the thread being detached: -- cgit v1.1