From 76295d4bbe914cc990e4c01efc94e46db4fa2016 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 25 Jun 2007 19:21:18 +0300 Subject: [PATCH] Bug #26564: Windows implementation of pthread_join crashes MySQL uses _beginthread()/_endthread() instead of _beginthreadex()/_endthreadex() to create/end its threads on Windows. According to MSDN _endthread() does close the thread handle. So there's no need the handle to be closed explicitly. Besides : WaitForSingleObject(, INFINITE) != WAIT_OBJECT_0) is true for all practical cases as the other two possible return codes (according to MSDN) cannot happen in that case the CloseHandle() was actually a dead code. Fixed by removing the CloseHandle() call. No test case added because it's not possible to test for absence of dead code. include/my_pthread.h: Bug #26564: Don't call CloseHandle since we use beginthread/endthread instead of beginthreadex/endthreadex. --- include/my_pthread.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/my_pthread.h b/include/my_pthread.h index e2cce40182d..27b621de925 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -181,8 +181,7 @@ void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ #define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B)) #define pthread_kill(A,B) pthread_dummy(0) -#define pthread_join(A,B) \ - ((WaitForSingleObject((A), INFINITE) != WAIT_OBJECT_0) || !CloseHandle(A)) +#define pthread_join(A,B) (WaitForSingleObject((A), INFINITE) != WAIT_OBJECT_0) /* Dummy defines for easier code */ #define pthread_attr_setdetachstate(A,B) pthread_dummy(0)