[PATCH v3] win32: close handles of threads that have been joined
- From
- Rose via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Dec 20, 2022, 19:00 UTC
- Message-ID
- <pull.1406.v3.git.git.1671562845014.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1406.v2.git.git.1671562663899.gitgitgadget@gmail.com>
From: Seija Kijin <doremylover123@gmail.com>
After joining threads, the handle to the original thread should be closed as it no longer needs to be open.
Signed-off-by: Seija Kijin <doremylover123@gmail.com>
---
win32: close handles of threads that have been joined
After joining threads, the handle to the original thread should be
closed as it no longer needs to be open.
Signed-off-by: Seija Kijin doremylover123@gmail.comPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1406%2FAtariDreams%2Fjoin-v3 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1406/AtariDreams/join-v3 Pull-Request: https://github.com/git/git/pull/1406
Range-diff vs v2:
1: 8b20c4149be ! 1: 2049576b193 win32: close handles of threads that have been joined
@@ compat/win32/pthread.c: int win32_pthread_join(pthread_t *thread, void **value_p
+ return EINVAL;
+ case WAIT_FAILED:
+ default:
-+ /* the function failed so we do not detach */
++ /* the function failed, so do not detach */
+ return err_win_to_posix(GetLastError());
}
}compat/win32/pthread.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/compat/win32/pthread.c b/compat/win32/pthread.c index 2e7eead42cb..306834a7153 100644 --- a/compat/win32/pthread.c +++ b/compat/win32/pthread.c @@ -39,14 +39,20 @@ int win32_pthread_join(pthread_t *thread, void **value_ptr) { DWORD result = WaitForSingleObject(thread->handle, INFINITE); switch (result) { - case WAIT_OBJECT_0: - if (value_ptr) - *value_ptr = thread->arg; - return 0; - case WAIT_ABANDONED: - return EINVAL; - default: - return err_win_to_posix(GetLastError()); + case WAIT_OBJECT_0: + if (value_ptr) + *value_ptr = thread->arg; + /* detach the thread once the join succeeds */ + CloseHandle(thread->handle); + return 0; + case WAIT_ABANDONED: + /* either thread is not joinable or another thread is waiting on + * this, so do not detatch */ + return EINVAL; + case WAIT_FAILED: + default: + /* the function failed, so do not detach */ + return err_win_to_posix(GetLastError()); } } base-commit: 7c2ef319c52c4997256f5807564523dfd4acdfc7
-- gitgitgadget