From 199d96f3e3f6077235be8e0bf9482d2a46e108c2 Mon Sep 17 00:00:00 2001 From: rpj Date: Thu, 7 Sep 2000 15:41:11 +0000 Subject: 2000-09-08 Ross Johnson * cancel.c (pthread_cancel): Must get "self" through calling pthread_self() which will ensure a POSIX thread struct is built for non-POSIX threads; return an error if this fails - Ollie Leahy (pthread_setcancelstate): Likewise. (pthread_setcanceltype): Likewise. * misc.c (ptw32_cancelable_wait): Likewise. * private.c (ptw32_tkAssocCreate): Remove unused #if 0 wrapped code. * pthread.h (ptw32_get_exception_services_code): Needed to be forward declared unconditionally. 2000-09-06 Ross Johnson * cancel.c (pthread_cancel): If called from the main thread "self" would be NULL; get "self" via pthread_self() instead of directly from TLS so that an implicit pthread object is created. * misc.c (pthread_equal): Strengthen test for NULLs. --- cancel.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'cancel.c') diff --git a/cancel.c b/cancel.c index 9e5b789..2e8aa41 100644 --- a/cancel.c +++ b/cancel.c @@ -106,7 +106,7 @@ pthread_setcancelstate (int state, int *oldstate) */ { int result = 0; - pthread_t self = (pthread_t) pthread_getspecific (ptw32_selfThreadKey); + pthread_t self = pthread_self(); if (self == NULL || (state != PTHREAD_CANCEL_ENABLE @@ -190,7 +190,7 @@ pthread_setcanceltype (int type, int *oldtype) */ { int result = 0; - pthread_t self = (pthread_t) pthread_getspecific (ptw32_selfThreadKey); + pthread_t self = pthread_self(); if (self == NULL || (type != PTHREAD_CANCEL_DEFERRED @@ -261,7 +261,7 @@ pthread_testcancel (void) * ------------------------------------------------------ */ { - pthread_t self = (pthread_t) pthread_getspecific (ptw32_selfThreadKey); + pthread_t self = pthread_self(); if (self != NULL && self->cancelState == PTHREAD_CANCEL_ENABLE @@ -295,7 +295,7 @@ pthread_cancel (pthread_t thread) * RESULTS * 0 successfully requested cancellation, * ESRCH no thread found corresponding to 'thread', - * + * ENOMEM implicit self thread create failed. * ------------------------------------------------------ */ { @@ -309,7 +309,10 @@ pthread_cancel (pthread_t thread) } result = 0; - self = (pthread_t) pthread_getspecific (ptw32_selfThreadKey); + if ((self = pthread_self()) == NULL) + { + return ENOMEM; + }; /* * FIXME!! -- cgit v1.2.3