From d17db2fd771ed4e0dc7dee6c043b335a89bdd545 Mon Sep 17 00:00:00 2001 From: yorah Date: Thu, 30 May 2013 11:30:34 +0200 Subject: [PATCH] thread: fix segfault on Windows 64 bits `lpExitCode` is a pointer to a long. A long is 32 bits wide on Windows. It means that on Windows 64bits, `GetExitCodeThread()` doesn't set/clear the high-order bytes of the 64 bits memory space pointed at by `value_ptr`. --- src/win32/pthread.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/win32/pthread.c b/src/win32/pthread.c index 232709e54..2f263b3e0 100644 --- a/src/win32/pthread.c +++ b/src/win32/pthread.c @@ -24,8 +24,10 @@ int pthread_join(pthread_t thread, void **value_ptr) DWORD ret = WaitForSingleObject(thread, INFINITE); if (ret == WAIT_OBJECT_0) { - if (value_ptr != NULL) + if (value_ptr != NULL) { + *value_ptr = NULL; GetExitCodeThread(thread, (void *)value_ptr); + } CloseHandle(thread); return 0; }