Skip to contentSkip to conversation

win32: check for NULL when creating thread

PATCH Superseded Rose via GitGitGadget 3 participants 7 messages Jan 31, 2023 – Feb 1, 2023

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 win32: check for NULL when creating thread

From: Seija Kijin <[email protected]>

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

---
win32: check for NULL when creating thread

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v1
Pull-Request: https://github.com/git/git/pull/1445

 compat/winansi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
compat/winansi.c +1 -1
index 3abe8dd5a27..f83610f684d 100644
@@ -644,7 +644,7 @@ void winansi_init(void)
 
 	/* start console spool thread on the pipe's read end */
 	hthread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);
-	if (hthread == INVALID_HANDLE_VALUE)
+	if (!hthread)
 		die_lasterr("CreateThread(console_thread) failed");
 
 	/* schedule cleanup routine */

base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473

Signature · 1 line
gitgitgadget
#1 lore raw

PATCH v2 1/1 win32: check for NULL after creating thread

From: Seija Kijin <[email protected]>

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

---
win32: check for NULL after creating thread

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v2
Pull-Request: https://github.com/git/git/pull/1445

Range-diff vs v1:

1: e75d15e42f4 ! 1: c956cafdec9 win32: check for NULL when creating thread
@@ Metadata
Author: Seija Kijin <[email protected]>

## Commit message ##
- win32: check for NULL when creating thread
+ win32: check for NULL after creating thread

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

 compat/winansi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
compat/winansi.c +1 -1
index 3abe8dd5a27..f83610f684d 100644
@@ -644,7 +644,7 @@ void winansi_init(void)
 
 	/* start console spool thread on the pipe's read end */
 	hthread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);
-	if (hthread == INVALID_HANDLE_VALUE)
+	if (!hthread)
 		die_lasterr("CreateThread(console_thread) failed");
 
 	/* schedule cleanup routine */

base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473

Signature · 1 line
gitgitgadget
#2 lore raw

PATCH v3 1/1 win32: check for NULL after creating thread

From: Seija Kijin <[email protected]>

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

---
win32: check for NULL after creating thread

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v3
Pull-Request: https://github.com/git/git/pull/1445

Range-diff vs v2:

1: c956cafdec9 ! 1: 1cbc43e0d82 win32: check for NULL after creating thread
@@ Commit message
as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL,
- not INVALID_HANDLE_VALUE, unlike other Windows
- API functions.
+ not INVALID_HANDLE_VALUE, unlike other Windows API functions.

 compat/winansi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
compat/winansi.c +1 -1
index 3abe8dd5a27..f83610f684d 100644
@@ -644,7 +644,7 @@ void winansi_init(void)
 
 	/* start console spool thread on the pipe's read end */
 	hthread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);
-	if (hthread == INVALID_HANDLE_VALUE)
+	if (!hthread)
 		die_lasterr("CreateThread(console_thread) failed");
 
 	/* schedule cleanup routine */

base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473

Signature · 1 line
gitgitgadget
Acked-by on v3 1/1
#3 lore raw

Re: [PATCH v3] win32: check for NULL after creating thread

Am 01.02.23 um 15:40 schrieb Rose via GitGitGadget:

Quoted 7 lines

From: Seija Kijin <[email protected]>

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

Nice catch!

The subject line sounds as if an error check was missing, but that is not true. I'd phrase it

compat/winansi: check for errors of CreateThread() correctly

Then drop the first sentence of the message body as it is very handwavy:
talking about "most cases" is not helpful if the few other cases are not enumerated. And the subsequent sentence is to the point and very helpful (substitute "CreateThread" for "thread creation").

Quoted 17 lines
 compat/winansi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
compat/winansi.c +1 -1
index 3abe8dd5a27..f83610f684d 100644
@@ -644,7 +644,7 @@ void winansi_init(void)
 
 	/* start console spool thread on the pipe's read end */
 	hthread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);
-	if (hthread == INVALID_HANDLE_VALUE)
+	if (!hthread)
 		die_lasterr("CreateThread(console_thread) failed");
 
 	/* schedule cleanup routine */
Quoted 1 line

base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473

-- Hannes

#4 lore raw

PATCH v4 1/1 compat/winansi: check for errors of CreateThread() correctly

In reply to Rose via GitGitGadget

From: Seija Kijin <[email protected]>

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

---
win32: check for NULL after creating thread

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v4
Pull-Request: https://github.com/git/git/pull/1445

Range-diff vs v3:

1: 1cbc43e0d82 ! 1: 6c4188977e8 win32: check for NULL after creating thread
@@ Metadata
Author: Seija Kijin <[email protected]>

## Commit message ##
- win32: check for NULL after creating thread
-
- Check for NULL handles, not "INVALID_HANDLE,"
- as CreateThread guarantees a valid handle in most cases.
+ compat/winansi: check for errors of CreateThread() correctly

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

 compat/winansi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
compat/winansi.c +1 -1
index 3abe8dd5a27..f83610f684d 100644
@@ -644,7 +644,7 @@ void winansi_init(void)
 
 	/* start console spool thread on the pipe's read end */
 	hthread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);
-	if (hthread == INVALID_HANDLE_VALUE)
+	if (!hthread)
 		die_lasterr("CreateThread(console_thread) failed");
 
 	/* schedule cleanup routine */

base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473

Signature · 1 line
gitgitgadget
#5 lore raw

Re: [PATCH v4] compat/winansi: check for errors of CreateThread() correctly

Quoted 7 lines · Rose via GitGitGadget

From: Seija Kijin <[email protected]>

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

---

Thanks. Will queue with the Ack by j6t given earlier.

Acked-by on v4 1/1
#6 lore raw

Re: [PATCH v4] compat/winansi: check for errors of CreateThread() correctly

In reply to Rose via GitGitGadget

Am 01.02.23 um 23:20 schrieb Rose via GitGitGadget:

Quoted 55 lines

From: Seija Kijin <[email protected]>

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

---
win32: check for NULL after creating thread

Check for NULL handles, not "INVALID_HANDLE," as CreateThread guarantees a valid handle in most cases.

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1445%2FAtariDreams%2FhThread-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1445/AtariDreams/hThread-v4
Pull-Request: https://github.com/git/git/pull/1445

Range-diff vs v3:

1: 1cbc43e0d82 ! 1: 6c4188977e8 win32: check for NULL after creating thread
@@ Metadata
Author: Seija Kijin <[email protected]>

## Commit message ##
- win32: check for NULL after creating thread
-
- Check for NULL handles, not "INVALID_HANDLE,"
- as CreateThread guarantees a valid handle in most cases.
+ compat/winansi: check for errors of CreateThread() correctly

The return value for failed thread creation is NULL, not INVALID_HANDLE_VALUE, unlike other Windows API functions.

 compat/winansi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
compat/winansi.c +1 -1
index 3abe8dd5a27..f83610f684d 100644
@@ -644,7 +644,7 @@ void winansi_init(void)
 
 	/* start console spool thread on the pipe's read end */
 	hthread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);
-	if (hthread == INVALID_HANDLE_VALUE)
+	if (!hthread)
 		die_lasterr("CreateThread(console_thread) failed");
 
 	/* schedule cleanup routine */
Quoted 1 line

base-commit: 2fc9e9ca3c7505bc60069f11e7ef09b1aeeee473

This iteration looks good, thank you!

-- Hannes