diff options
| author | David Xu <davidxu@FreeBSD.org> | 2003-06-28 09:39:35 +0000 |
|---|---|---|
| committer | David Xu <davidxu@FreeBSD.org> | 2003-06-28 09:39:35 +0000 |
| commit | a07576d63c3fed5ed755df6b5c47b01f4a834a70 (patch) | |
| tree | 3556df33f6e22515a4326c7736a5ed85e5c3aa05 /lib/libpthread/thread | |
| parent | d9a4740f18e2e2874ef63f74bb8ba5eb0fb490a3 (diff) | |
Notes
Diffstat (limited to 'lib/libpthread/thread')
| -rw-r--r-- | lib/libpthread/thread/thr_cancel.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/libpthread/thread/thr_cancel.c b/lib/libpthread/thread/thr_cancel.c index 064e422cadf8..57cefa28ee39 100644 --- a/lib/libpthread/thread/thr_cancel.c +++ b/lib/libpthread/thread/thr_cancel.c @@ -27,7 +27,11 @@ _pthread_cancel(pthread_t pthread) * Take the scheduling lock while we change the cancel flags. */ THR_SCHED_LOCK(curthread, pthread); - + if (pthread->flags & THR_FLAGS_EXITING) { + THR_SCHED_UNLOCK(curthread, pthread); + _thr_ref_delete(curthread, pthread); + return (ESRCH); + } if (((pthread->cancelflags & PTHREAD_CANCEL_DISABLE) != 0) || (((pthread->cancelflags & THR_AT_CANCEL_POINT) == 0) && ((pthread->cancelflags & PTHREAD_CANCEL_ASYNCHRONOUS) == 0))) @@ -105,7 +109,7 @@ _pthread_cancel(pthread_t pthread) } if ((pthread->blocked != 0) && ((pthread->cancelflags & THR_AT_CANCEL_POINT) != 0)) - kse_thr_interrupt(&pthread->tmbx); + kse_thr_interrupt(&pthread->tmbx, -1); } /* |
