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: close handles of threads that have been joined prep 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-v7 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1406/AtariDreams/join-v7 Pull-Request: https://github.com/git/git/pull/1406 Range-diff vs v6: -: ----------- > 1: b40287508df win32: close handles of threads that have been joined 1: 0b5afdb93db ! 2: f780ed525eb win32: close handles of threads that have been joined @@ Metadata Author: Seija Kijin <doremylover123@xxxxxxxxx> ## Commit message ## - 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. - - This change makes the function POSIX compliant. + prep Signed-off-by: Seija Kijin <doremylover123@xxxxxxxxx> ## compat/win32/pthread.c ## +@@ compat/win32/pthread.c: static unsigned __stdcall win32_start_routine(void *arg) + } + + int pthread_create(pthread_t *thread, const void *unused, +- void *(*start_routine)(void*), void *arg) ++ void *(*start_routine)(void *), void *arg) + { + thread->arg = arg; + thread->start_routine = start_routine; +- thread->handle = (HANDLE) +- _beginthreadex(NULL, 0, win32_start_routine, thread, 0, NULL); ++ thread->handle = (HANDLE)_beginthreadex(NULL, 0, win32_start_routine, ++ thread, 0, NULL); + + if (!thread->handle) + return errno; @@ compat/win32/pthread.c: int pthread_create(pthread_t *thread, const void *unused, int win32_pthread_join(pthread_t *thread, void **value_ptr) @@ 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 function failed, so do not detach */ - return err_win_to_posix(GetLastError()); + switch (WaitForSingleObject(thread->handle, INFINITE)) { + case WAIT_OBJECT_0: 2: 5b35362e5d2 < -: ----------- prep -- gitgitgadget