From 4d62ef92fda14315f465a686c5ef272cdb2dc8e4 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 15 Oct 2026 12:04:27 +0300 Subject: [PATCH] Fix CreateThread() failure checks CreateThread returns NULL on failure, not INVALID_HANDLE_VALUE. In setitimer(), a failed thread creation would silently disable all timer-based timeouts. Author: Sehrope Sarkuni Discussion: https://www.postgresql.org/message-id/CAH7T-apWWfEt+V8uLU7KXv7CMM9LoqJ1Zo2LdWmXMz=u-Ek9=w@mail.gmail.com Backpatch-through: 14 --- src/backend/port/win32/timer.c | 2 +- src/bin/pg_test_fsync/pg_test_fsync.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/backend/port/win32/timer.c b/src/backend/port/win32/timer.c index 4843e8bd498..ae4f18ac39e 100644 --- a/src/backend/port/win32/timer.c +++ b/src/backend/port/win32/timer.c @@ -103,7 +103,7 @@ setitimer(int which, const struct itimerval *value, struct itimerval *ovalue) InitializeCriticalSection(&timerCommArea.crit_sec); timerThreadHandle = CreateThread(NULL, 0, pg_timer_thread, NULL, 0, NULL); - if (timerThreadHandle == INVALID_HANDLE_VALUE) + if (timerThreadHandle == NULL) ereport(FATAL, (errmsg_internal("could not create timer thread: error code %lu", GetLastError()))); diff --git a/src/bin/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c index 0060ea15902..670ae709f79 100644 --- a/src/bin/pg_test_fsync/pg_test_fsync.c +++ b/src/bin/pg_test_fsync/pg_test_fsync.c @@ -50,8 +50,7 @@ do { \ #define START_TIMER \ do { \ alarm_triggered = false; \ - if (CreateThread(NULL, 0, process_alarm, NULL, 0, NULL) == \ - INVALID_HANDLE_VALUE) \ + if (CreateThread(NULL, 0, process_alarm, NULL, 0, NULL) == NULL) \ pg_fatal("could not create thread for alarm"); \ gettimeofday(&start_t, NULL); \ } while (0)