Commit d17db2fd by yorah

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`.
parent 504a4fd1
...@@ -24,8 +24,10 @@ int pthread_join(pthread_t thread, void **value_ptr) ...@@ -24,8 +24,10 @@ int pthread_join(pthread_t thread, void **value_ptr)
DWORD ret = WaitForSingleObject(thread, INFINITE); DWORD ret = WaitForSingleObject(thread, INFINITE);
if (ret == WAIT_OBJECT_0) { if (ret == WAIT_OBJECT_0) {
if (value_ptr != NULL) if (value_ptr != NULL) {
*value_ptr = NULL;
GetExitCodeThread(thread, (void *)value_ptr); GetExitCodeThread(thread, (void *)value_ptr);
}
CloseHandle(thread); CloseHandle(thread);
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment