{"thread":{"id":"59165","subject":"[PATCH] win32: check for NULL when creating thread","startedAt":"2023-01-31T14:49:51Z","lastAt":"2023-02-01T22:40:04Z","messageCount":7,"participants":["Rose via GitGitGadget","Johannes Sixt","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"471184","messageId":"pull.1445.git.git.1675176581433.gitgitgadget@gmail.com","threadId":"59165","inReplyTo":null,"subject":"[PATCH] win32: check for NULL when creating thread","fromName":"Rose via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2023-01-31T14:49:41Z","receivedAt":"2023-01-31T14:49:51Z","isPatch":true,"sender":{"key":"ckelsch@jgrcpa.com","avatar":null},"body":"From: Seija Kijin <doremylover123@gmail.com>\n\nCheck for NULL handles, not \"INVALID_HANDLE,\"\nas CreateThread guarantees a valid handle in most cases.\n\nThe return value for failed thread creation is NULL,\nnot INVALID_HANDLE_VALUE, unlike other Windows\nAPI functions.\n\nSigned-off-by: Seija Kijin <doremylover123@gmail.com>\n---\n    win32: check for NULL when creating thread\n    \n    Check for NULL handles, not \"INVALID_HANDLE,\" as CreateThread guarantees\n    a valid handle in most cases.\n    \n    The return value for failed thread creation is NULL, not\n    INVALID_HANDLE_VALUE, unlike other Windows API functions.\n    \n    Signed-off-by: Seija Kijin doremylover123@gmail.com\n\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v1\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v1\nPull-Request: https://github.com/git/git/pull/1445\n\n compat/winansi.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/compat/winansi.c b/compat/winansi.c\nindex 3abe8dd5a27..f83610f684d 100644\n--- a/compat/winansi.c\n+++ b/compat/winansi.c\n@@ -644,7 +644,7 @@ void winansi_init(void)\n \n \t/* start console spool thread on the pipe's read end */\n \ththread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);\n-\tif (hthread == INVALID_HANDLE_VALUE)\n+\tif (!hthread)\n \t\tdie_lasterr(\"CreateThread(console_thread) failed\");\n \n \t/* schedule cleanup routine */\n\nbase-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473\n-- \ngitgitgadget\n"},{"id":"471185","messageId":"pull.1445.v2.git.git.1675176818033.gitgitgadget@gmail.com","threadId":"59165","inReplyTo":"pull.1445.git.git.1675176581433.gitgitgadget@gmail.com","subject":"[PATCH v2] win32: check for NULL after creating thread","fromName":"Rose via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2023-01-31T14:53:37Z","receivedAt":"2023-01-31T14:53:49Z","isPatch":true,"sender":{"key":"ckelsch@jgrcpa.com","avatar":null},"body":"From: Seija Kijin <doremylover123@gmail.com>\n\nCheck for NULL handles, not \"INVALID_HANDLE,\"\nas CreateThread guarantees a valid handle in most cases.\n\nThe return value for failed thread creation is NULL,\nnot INVALID_HANDLE_VALUE, unlike other Windows\nAPI functions.\n\nSigned-off-by: Seija Kijin <doremylover123@gmail.com>\n---\n    win32: check for NULL after creating thread\n    \n    Check for NULL handles, not \"INVALID_HANDLE,\" as CreateThread guarantees\n    a valid handle in most cases.\n    \n    The return value for failed thread creation is NULL, not\n    INVALID_HANDLE_VALUE, unlike other Windows API functions.\n    \n    Signed-off-by: Seija Kijin doremylover123@gmail.com\n\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v2\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v2\nPull-Request: https://github.com/git/git/pull/1445\n\nRange-diff vs v1:\n\n 1:  e75d15e42f4 ! 1:  c956cafdec9 win32: check for NULL when creating thread\n     @@ Metadata\n      Author: Seija Kijin <doremylover123@gmail.com>\n      \n       ## Commit message ##\n     -    win32: check for NULL when creating thread\n     +    win32: check for NULL after creating thread\n      \n          Check for NULL handles, not \"INVALID_HANDLE,\"\n          as CreateThread guarantees a valid handle in most cases.\n\n\n compat/winansi.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/compat/winansi.c b/compat/winansi.c\nindex 3abe8dd5a27..f83610f684d 100644\n--- a/compat/winansi.c\n+++ b/compat/winansi.c\n@@ -644,7 +644,7 @@ void winansi_init(void)\n \n \t/* start console spool thread on the pipe's read end */\n \ththread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);\n-\tif (hthread == INVALID_HANDLE_VALUE)\n+\tif (!hthread)\n \t\tdie_lasterr(\"CreateThread(console_thread) failed\");\n \n \t/* schedule cleanup routine */\n\nbase-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473\n-- \ngitgitgadget\n"},{"id":"471245","messageId":"pull.1445.v3.git.git.1675262454817.gitgitgadget@gmail.com","threadId":"59165","inReplyTo":"pull.1445.v2.git.git.1675176818033.gitgitgadget@gmail.com","subject":"[PATCH v3] win32: check for NULL after creating thread","fromName":"Rose via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2023-02-01T14:40:54Z","receivedAt":"2023-02-01T14:41:07Z","isPatch":true,"sender":{"key":"ckelsch@jgrcpa.com","avatar":null},"body":"From: Seija Kijin <doremylover123@gmail.com>\n\nCheck for NULL handles, not \"INVALID_HANDLE,\"\nas CreateThread guarantees a valid handle in most cases.\n\nThe return value for failed thread creation is NULL,\nnot INVALID_HANDLE_VALUE, unlike other Windows API functions.\n\nSigned-off-by: Seija Kijin <doremylover123@gmail.com>\n---\n    win32: check for NULL after creating thread\n    \n    Check for NULL handles, not \"INVALID_HANDLE,\" as CreateThread guarantees\n    a valid handle in most cases.\n    \n    The return value for failed thread creation is NULL, not\n    INVALID_HANDLE_VALUE, unlike other Windows API functions.\n    \n    Signed-off-by: Seija Kijin doremylover123@gmail.com\n\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v3\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v3\nPull-Request: https://github.com/git/git/pull/1445\n\nRange-diff vs v2:\n\n 1:  c956cafdec9 ! 1:  1cbc43e0d82 win32: check for NULL after creating thread\n     @@ Commit message\n          as CreateThread guarantees a valid handle in most cases.\n      \n          The return value for failed thread creation is NULL,\n     -    not INVALID_HANDLE_VALUE, unlike other Windows\n     -    API functions.\n     +    not INVALID_HANDLE_VALUE, unlike other Windows API functions.\n      \n          Signed-off-by: Seija Kijin <doremylover123@gmail.com>\n      \n\n\n compat/winansi.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/compat/winansi.c b/compat/winansi.c\nindex 3abe8dd5a27..f83610f684d 100644\n--- a/compat/winansi.c\n+++ b/compat/winansi.c\n@@ -644,7 +644,7 @@ void winansi_init(void)\n \n \t/* start console spool thread on the pipe's read end */\n \ththread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);\n-\tif (hthread == INVALID_HANDLE_VALUE)\n+\tif (!hthread)\n \t\tdie_lasterr(\"CreateThread(console_thread) failed\");\n \n \t/* schedule cleanup routine */\n\nbase-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473\n-- \ngitgitgadget\n"},{"id":"471268","messageId":"f3de2ca3-167e-365c-8124-d6ba9bba920d@kdbg.org","threadId":"59165","inReplyTo":"pull.1445.v3.git.git.1675262454817.gitgitgadget@gmail.com","subject":"Re: [PATCH v3] win32: check for NULL after creating thread","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2023-02-01T21:51:50Z","receivedAt":"2023-02-01T21:51:58Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 01.02.23 um 15:40 schrieb Rose via GitGitGadget:\n> From: Seija Kijin <doremylover123@gmail.com>\n> \n> Check for NULL handles, not \"INVALID_HANDLE,\"\n> as CreateThread guarantees a valid handle in most cases.\n> \n> The return value for failed thread creation is NULL,\n> not INVALID_HANDLE_VALUE, unlike other Windows API functions.\n\nNice catch!\n\nThe subject line sounds as if an error check was missing, but that is\nnot true. I'd phrase it\n\n\tcompat/winansi: check for errors of CreateThread() correctly\n\nThen drop the first sentence of the message body as it is very handwavy:\ntalking about \"most cases\" is not helpful if the few other cases are not\nenumerated. And the subsequent sentence is to the point and very helpful\n(substitute \"CreateThread\" for \"thread creation\").\n\n>  compat/winansi.c | 2 +-\n>  1 file changed, 1 insertion(+), 1 deletion(-)\n> \n> diff --git a/compat/winansi.c b/compat/winansi.c\n> index 3abe8dd5a27..f83610f684d 100644\n> --- a/compat/winansi.c\n> +++ b/compat/winansi.c\n> @@ -644,7 +644,7 @@ void winansi_init(void)\n>  \n>  \t/* start console spool thread on the pipe's read end */\n>  \ththread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);\n> -\tif (hthread == INVALID_HANDLE_VALUE)\n> +\tif (!hthread)\n>  \t\tdie_lasterr(\"CreateThread(console_thread) failed\");\n>  \n>  \t/* schedule cleanup routine */\n> \n> base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473\n\nAcked-by: Johannes Sixt <j6t@kdbg.org>\n\n-- Hannes\n\n"},{"id":"471271","messageId":"pull.1445.v4.git.git.1675290034144.gitgitgadget@gmail.com","threadId":"59165","inReplyTo":"pull.1445.v3.git.git.1675262454817.gitgitgadget@gmail.com","subject":"[PATCH v4] compat/winansi: check for errors of CreateThread() correctly","fromName":"Rose via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2023-02-01T22:20:33Z","receivedAt":"2023-02-01T22:20:41Z","isPatch":true,"sender":{"key":"ckelsch@jgrcpa.com","avatar":null},"body":"From: Seija Kijin <doremylover123@gmail.com>\n\nThe return value for failed thread creation is NULL,\nnot INVALID_HANDLE_VALUE, unlike other Windows API functions.\n\nSigned-off-by: Seija Kijin <doremylover123@gmail.com>\n---\n    win32: check for NULL after creating thread\n    \n    Check for NULL handles, not \"INVALID_HANDLE,\" as CreateThread guarantees\n    a valid handle in most cases.\n    \n    The return value for failed thread creation is NULL, not\n    INVALID_HANDLE_VALUE, unlike other Windows API functions.\n    \n    Signed-off-by: Seija Kijin doremylover123@gmail.com\n\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v4\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v4\nPull-Request: https://github.com/git/git/pull/1445\n\nRange-diff vs v3:\n\n 1:  1cbc43e0d82 ! 1:  6c4188977e8 win32: check for NULL after creating thread\n     @@ Metadata\n      Author: Seija Kijin <doremylover123@gmail.com>\n      \n       ## Commit message ##\n     -    win32: check for NULL after creating thread\n     -\n     -    Check for NULL handles, not \"INVALID_HANDLE,\"\n     -    as CreateThread guarantees a valid handle in most cases.\n     +    compat/winansi: check for errors of CreateThread() correctly\n      \n          The return value for failed thread creation is NULL,\n          not INVALID_HANDLE_VALUE, unlike other Windows API functions.\n\n\n compat/winansi.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/compat/winansi.c b/compat/winansi.c\nindex 3abe8dd5a27..f83610f684d 100644\n--- a/compat/winansi.c\n+++ b/compat/winansi.c\n@@ -644,7 +644,7 @@ void winansi_init(void)\n \n \t/* start console spool thread on the pipe's read end */\n \ththread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);\n-\tif (hthread == INVALID_HANDLE_VALUE)\n+\tif (!hthread)\n \t\tdie_lasterr(\"CreateThread(console_thread) failed\");\n \n \t/* schedule cleanup routine */\n\nbase-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473\n-- \ngitgitgadget\n"},{"id":"471272","messageId":"xmqq357pyptu.fsf@gitster.g","threadId":"59165","inReplyTo":"pull.1445.v4.git.git.1675290034144.gitgitgadget@gmail.com","subject":"Re: [PATCH v4] compat/winansi: check for errors of CreateThread() correctly","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2023-02-01T22:37:49Z","receivedAt":"2023-02-01T22:37:53Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Rose via GitGitGadget\" <gitgitgadget@gmail.com> writes:\n\n> From: Seija Kijin <doremylover123@gmail.com>\n>\n> The return value for failed thread creation is NULL,\n> not INVALID_HANDLE_VALUE, unlike other Windows API functions.\n>\n> Signed-off-by: Seija Kijin <doremylover123@gmail.com>\n> ---\n\nThanks.  Will queue with the Ack by j6t given earlier.\n"},{"id":"471273","messageId":"e6fa3452-6d82-bf40-ddb2-44dc686a2e29@kdbg.org","threadId":"59165","inReplyTo":"pull.1445.v4.git.git.1675290034144.gitgitgadget@gmail.com","subject":"Re: [PATCH v4] compat/winansi: check for errors of CreateThread() correctly","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2023-02-01T22:39:57Z","receivedAt":"2023-02-01T22:40:04Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 01.02.23 um 23:20 schrieb Rose via GitGitGadget:\n> From: Seija Kijin <doremylover123@gmail.com>\n> \n> The return value for failed thread creation is NULL,\n> not INVALID_HANDLE_VALUE, unlike other Windows API functions.\n> \n> Signed-off-by: Seija Kijin <doremylover123@gmail.com>\n> ---\n>     win32: check for NULL after creating thread\n>     \n>     Check for NULL handles, not \"INVALID_HANDLE,\" as CreateThread guarantees\n>     a valid handle in most cases.\n>     \n>     The return value for failed thread creation is NULL, not\n>     INVALID_HANDLE_VALUE, unlike other Windows API functions.\n>     \n>     Signed-off-by: Seija Kijin doremylover123@gmail.com\n> \n> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v4\n> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v4\n> Pull-Request: https://github.com/git/git/pull/1445\n> \n> Range-diff vs v3:\n> \n>  1:  1cbc43e0d82 ! 1:  6c4188977e8 win32: check for NULL after creating thread\n>      @@ Metadata\n>       Author: Seija Kijin <doremylover123@gmail.com>\n>       \n>        ## Commit message ##\n>      -    win32: check for NULL after creating thread\n>      -\n>      -    Check for NULL handles, not \"INVALID_HANDLE,\"\n>      -    as CreateThread guarantees a valid handle in most cases.\n>      +    compat/winansi: check for errors of CreateThread() correctly\n>       \n>           The return value for failed thread creation is NULL,\n>           not INVALID_HANDLE_VALUE, unlike other Windows API functions.\n> \n> \n>  compat/winansi.c | 2 +-\n>  1 file changed, 1 insertion(+), 1 deletion(-)\n> \n> diff --git a/compat/winansi.c b/compat/winansi.c\n> index 3abe8dd5a27..f83610f684d 100644\n> --- a/compat/winansi.c\n> +++ b/compat/winansi.c\n> @@ -644,7 +644,7 @@ void winansi_init(void)\n>  \n>  \t/* start console spool thread on the pipe's read end */\n>  \ththread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);\n> -\tif (hthread == INVALID_HANDLE_VALUE)\n> +\tif (!hthread)\n>  \t\tdie_lasterr(\"CreateThread(console_thread) failed\");\n>  \n>  \t/* schedule cleanup routine */\n> \n> base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473\n\nThis iteration looks good, thank you!\n\nAcked-by: Johannes Sixt <j6t@kdbg.org>\n\n-- Hannes\n\n"}]}