From 23a6a12dfa317e48627c8fec72ee80151276bad6 Mon Sep 17 00:00:00 2001 From: Seija Kijin Date: Tue, 3 Jan 2023 16:20:18 +0000 Subject: win32: prepare pthread.c for change by formatting File has been formatted to meet coding guidelines. Signed-off-by: Seija Kijin Signed-off-by: Junio C Hamano --- compat/win32/pthread.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'compat') diff --git a/compat/win32/pthread.c b/compat/win32/pthread.c index 2e7eead42c..cf53bc61d8 100644 --- a/compat/win32/pthread.c +++ b/compat/win32/pthread.c @@ -22,12 +22,12 @@ 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; @@ -39,14 +39,14 @@ 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; + return 0; + case WAIT_ABANDONED: + return EINVAL; + default: + return err_win_to_posix(GetLastError()); } } -- cgit v1.2.3 From 238a9dfe86d18214bc0b8be079feee01a2fdc407 Mon Sep 17 00:00:00 2001 From: Seija Kijin Date: Tue, 3 Jan 2023 16:20:19 +0000 Subject: win32: close handles of threads that have been joined After the thread terminates, the handle to the original thread should be closed. This change makes win32_pthread_join POSIX compliant. Signed-off-by: Seija Kijin Signed-off-by: Junio C Hamano --- compat/win32/pthread.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'compat') diff --git a/compat/win32/pthread.c b/compat/win32/pthread.c index cf53bc61d8..85f8f7920c 100644 --- a/compat/win32/pthread.c +++ b/compat/win32/pthread.c @@ -42,10 +42,13 @@ 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()); } } -- cgit v1.2.3