From ab9f05fd540b3eff6456f886edda87cb95bfbadc Mon Sep 17 00:00:00 2001 From: rpj Date: Tue, 23 Mar 1999 19:43:43 +0000 Subject: Wed Mar 24 11:32:07 1999 Ross Johnson * misc.c (CancelableWait): Initialise exceptionInformation[2]. (pthread_self): Get a real Win32 thread handle for implicit threads. * cancel.c (pthread_testcancel): Initialise exceptionInformation[2]. * implement.h (SE_INFORMATION): Fix values. * private.c (_pthread_threadDestroy): Close the thread handle. Fri Mar 19 12:57:27 1999 Ross Johnson * cancel.c (comments): Update and cleanup. Fri Mar 19 09:12:59 1999 Ross Johnson * private.c (_pthread_threadStart): status returns PTHREAD_CANCELED. * pthread.h (PTHREAD_CANCELED): defined. --- misc.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'misc.c') diff --git a/misc.c b/misc.c index cdf6ec8..a37db5c 100644 --- a/misc.c +++ b/misc.c @@ -26,9 +26,6 @@ #include "pthread.h" #include "implement.h" -/* - * Code contributed by John E. Bossom . - */ int pthread_once ( @@ -158,14 +155,26 @@ pthread_self (void) * executing thread. */ self = (pthread_t) calloc (1, sizeof (*self)); + if (self != NULL) { - self->implicit = 1; self->detachState = PTHREAD_CREATE_DETACHED; self->thread = GetCurrentThreadId (); - self->threadH = GetCurrentThread (); + + if( !DuplicateHandle( + GetCurrentProcess(), + GetCurrentThread(), + GetCurrentProcess(), + &self->threadH, + 0, + FALSE, + DUPLICATE_SAME_ACCESS ) ) + { + free( self ); + return (NULL); + } } pthread_setspecific (_pthread_selfThreadKey, self); @@ -307,6 +316,7 @@ CancelableWait (HANDLE waitHandle, DWORD timeout) exceptionInformation[0] = (DWORD) (0); exceptionInformation[1] = (DWORD) (0); + exceptionInformation[2] = (DWORD) (0); RaiseException ( EXCEPTION_PTHREAD_SERVICES, @@ -351,5 +361,4 @@ pthreadCancelableTimedWait (HANDLE waitHandle, DWORD timeout) return (CancelableWait(waitHandle, timeout)); } -/* */ -- cgit v1.2.3