Am 19.12.22 um 19:34 schrieb Rose via GitGitGadget: > From: Seija Kijin <doremylover123@xxxxxxxxx> > > 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> > --- > 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..de89667ef70 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; This is a good change. It is a severe omission that the handle was not closed. (But I still have to test the patch.) > + case WAIT_ABANDONED: > + /* either thread is not joinable or another thread is waiting on > + * this, so we do not detatch */ > + return EINVAL; I don't know which cases this mental note wants to help. Assuming that the [win232_]pthread_ API is used correctly, this error cannot happen (WAIT_ABANDONED can only happen when WaitForSingleObject is called on a mutex object). > + default: > + case WAIT_FAILED: > + /* the function failed so we do not detach */ > + return err_win_to_posix(GetLastError()); > } Good. -- Hannes