From a6b1dfd1c8e1f86eb36a4871ba4dd18edde960c9 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 15 Jan 2004 09:59:11 +0000 Subject: [PATCH] Fix ldap_pvt_thread_self, GetCurrentThread() returns a constant, not a unique value. --- libraries/libldap_r/thr_nt.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/libraries/libldap_r/thr_nt.c b/libraries/libldap_r/thr_nt.c index a5b22cf966..a68d2608e4 100644 --- a/libraries/libldap_r/thr_nt.c +++ b/libraries/libldap_r/thr_nt.c @@ -43,13 +43,17 @@ ldap_pvt_thread_create( ldap_pvt_thread_t * thread, { unsigned tid; HANDLE thd; + int rc = -1; thd = (HANDLE) _beginthreadex(NULL, LDAP_PVT_THREAD_STACK_SIZE, (thrfunc_t *) start_routine, arg, 0, &tid); - *thread = (ldap_pvt_thread_t) thd; - - return thd == NULL ? -1 : 0; + if ( thd ) { + *thread = (ldap_pvt_thread_t) tid; + CloseHandle( thd ); + rc = 0; + } + return rc; } void @@ -62,7 +66,12 @@ int ldap_pvt_thread_join( ldap_pvt_thread_t thread, void **thread_return ) { DWORD status; - status = WaitForSingleObject( (HANDLE) thread, INFINITE ); + HANDLE thd; + HANDLE __stdcall OpenThread( int, int, int ); + + thd = OpenThread( SYNCHRONIZE, 0, thread ); + status = WaitForSingleObject( thd, INFINITE ); + CloseHandle( thd ); return status == WAIT_FAILED ? -1 : 0; } @@ -158,7 +167,7 @@ ldap_pvt_thread_mutex_trylock( ldap_pvt_thread_mutex_t *mp ) ldap_pvt_thread_t ldap_pvt_thread_self( void ) { - return GetCurrentThread(); + return GetCurrentThreadId(); } #endif -- 2.39.5