Commit d17db2fd771ed4e0dc7dee6c043b335a89bdd545

yorah 2013-05-30T11:30:34

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`.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
diff --git a/src/win32/pthread.c b/src/win32/pthread.c
index 232709e..2f263b3 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;
 	}