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@xxxxxxxxx Seija Kijin (2): win32-pthread: prepare pthread.c for change by formatting win32: close handles of threads that have been joined compat/win32/pthread.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) base-commit: 7c2ef319c52c4997256f5807564523dfd4acdfc7 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1406%2FAtariDreams%2Fjoin-v10 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1406/AtariDreams/join-v10 Pull-Request: https://github.com/git/git/pull/1406 Range-diff vs v9: 2: 4c82a16a995 ! 1: e0cc43efc6c prep: reformat pthread.c to fit coding guidelines @@ Metadata Author: Seija Kijin <doremylover123@xxxxxxxxx> ## Commit message ## - prep: reformat pthread.c to fit coding guidelines + win32-pthread: prepare pthread.c for change by formatting - The motivation for this change is that - the post-image better fits the coding - guidelines, especially since this file - was changed. + File has been formatted to meet coding guidelines Signed-off-by: Seija Kijin <doremylover123@xxxxxxxxx> @@ compat/win32/pthread.c: int pthread_create(pthread_t *thread, const void *unused - case WAIT_OBJECT_0: - if (value_ptr) - *value_ptr = thread->arg; -- CloseHandle(thread->handle); - return 0; - case WAIT_ABANDONED: -- CloseHandle(thread->handle); - return EINVAL; - default: -- /* the wait failed, so do not detach */ - return err_win_to_posix(GetLastError()); + switch (WaitForSingleObject(thread->handle, INFINITE)) { + case WAIT_OBJECT_0: + if (value_ptr) + *value_ptr = thread->arg; -+ CloseHandle(thread->handle); + return 0; + case WAIT_ABANDONED: -+ CloseHandle(thread->handle); + return EINVAL; + default: -+ /* the wait failed, so do not detach */ + return err_win_to_posix(GetLastError()); } } 1: d9b1df22e03 ! 2: d05d4c2e4b2 win32: close handles of threads that have been joined @@ Commit message ## compat/win32/pthread.c ## @@ compat/win32/pthread.c: int win32_pthread_join(pthread_t *thread, void **value_ptr) - case WAIT_OBJECT_0: - if (value_ptr) - *value_ptr = thread->arg; -+ CloseHandle(thread->handle); - return 0; - case WAIT_ABANDONED: -+ CloseHandle(thread->handle); - return EINVAL; - default: -+ /* the wait failed, so do not detach */ - return err_win_to_posix(GetLastError()); + case WAIT_OBJECT_0: + if (value_ptr) + *value_ptr = thread->arg; ++ CloseHandle(thread->handle); + return 0; + case WAIT_ABANDONED: ++ CloseHandle(thread->handle); + return EINVAL; + default: ++ /* the wait failed, so do not detach */ + return err_win_to_posix(GetLastError()); } } -- gitgitgadget