git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] win32: close handles of threads that have been joined

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Dec 19, 2022, 18:40 UTC
Message-ID
<221219.86ili7xmd5.gmgdl@evledraar.gmail.com>
In-Reply-To
<pull.1406.git.git.1671474876207.gitgitgadget@gmail.com>
On Mon, Dec 19 2022, Rose via GitGitGadget wrote:
Show 46 quoted lines
> 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.com
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1406%2FAtariDreams%2Fjoin-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1406/AtariDreams/join-v1
> Pull-Request: https://github.com/git/git/pull/1406
>
>  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;
> +	case WAIT_ABANDONED:
> +		/* either thread is not joinable or another thread is waiting on
> +		 * this, so we do not detatch */
See CodingGuidelines for how multi-line comments should look like.
	/*
	 * Like this
	 * Another line etc.
	 */
Show 5 quoted lines
> +		return EINVAL;
> +	default:
> +	case WAIT_FAILED:
> +		/* the function failed so we do not detach */
> +		return err_win_to_posix(GetLastError());

The post-image adhares to our CodingGuidelines better than the pre-image, but please split up such re-indentation into a "prep" change. Manually looking at this with "git show -w" shows the actual (and smaller) functional change.

You add a "case" for WAIT_FAILED", but keep "default".

I have no idea about this API, but a search turned up: https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitforsingleobject

That seems to suggest that it only returns 4 possible values.

Rather than having the "default" case shouldn't we (and this is just a suggestion, and should be its own prep change in any case) do:

	switch (result) {
	case WAIT_OBJECT_0:
		return ...;
	case WAIT_ABANDONED:
		return ...;
	case WAIT_TIMEOUT:
	case WAIT_FAILED:
		return ...;
	default:
		BUG("unhandled result %d", result);
	}
I.e. instead of keeping "default" you can just list "WAIT_TIMEOUT".

I don't know if that's OK with this API, it does say "If the function succeeds, the return value indicates, so maybe that "default" handles a lot more still?

Previous: Rose via GitGitGadgetNext: Johannes Sixt
Message 2 of 41 in “win32: close handles of threads that have been joined”
  1. win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 19, 2022
  2. Ævar Arnfjörð BjarmasonDec 19, 2022
  3. Johannes SixtDec 20, 2022
  4. win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 20, 2022
  5. win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 20, 2022
  6. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 20, 2022
  7. 1/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Dec 20, 2022
  8. 2/2 prepSeija Kijin via GitGitGadget, Dec 20, 2022
  9. win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 20, 2022
  10. Johannes SixtDec 20, 2022
  11. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 21, 2022
  12. 1/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Dec 21, 2022
  13. 2/2 prepSeija Kijin via GitGitGadget, Dec 21, 2022
  14. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 21, 2022
  15. 2/2 prepSeija Kijin via GitGitGadget, Dec 21, 2022
  16. 1/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Dec 21, 2022
  17. Johannes SixtDec 22, 2022
  18. win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 22, 2022
  19. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 22, 2022
  20. 2/2 prep: reformat pthread.c to fit coding guidelinesSeija Kijin via GitGitGadget, Dec 22, 2022
  21. Junio C HamanoDec 23, 2022
  22. 1/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Dec 22, 2022
  23. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 23, 2022
  24. 1/2 win32-pthread: prepare pthread.c for change by formattingSeija Kijin via GitGitGadget, Dec 23, 2022
  25. 2/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Dec 23, 2022
  26. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 23, 2022
  27. 1/2 win32-pthread: prepare pthread.c for change by formattingSeija Kijin via GitGitGadget, Dec 23, 2022
  28. 2/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Dec 23, 2022
  29. René ScharfeDec 24, 2022
  30. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Dec 25, 2022
  31. 2/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Dec 25, 2022
  32. Junio C HamanoDec 26, 2022
  33. 1/2 win32-pthread: prepare pthread.c for change by formattingSeija Kijin via GitGitGadget, Dec 25, 2022
  34. Junio C HamanoDec 26, 2022
  35. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Jan 3, 2023
  36. 1/2 win32: prepare pthread.c for change by formattingSeija Kijin via GitGitGadget, Jan 3, 2023
  37. 2/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Jan 3, 2023
  38. 0/2 win32: close handles of threads that have been joinedRose via GitGitGadget, Jan 5, 2023
  39. 1/2 win32: prepare pthread.c for change by formattingSeija Kijin via GitGitGadget, Jan 5, 2023
  40. 2/2 win32: close handles of threads that have been joinedSeija Kijin via GitGitGadget, Jan 5, 2023
  41. Junio C HamanoJan 6, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.