0001-pg_ctl-miscinit-don-t-cast-MyStartTime-to-long.patch
text/x-patch
Filename: 0001-pg_ctl-miscinit-don-t-cast-MyStartTime-to-long.patch
Type: text/x-patch
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: pg_ctl/miscinit: don't cast MyStartTime to long.
| File | + | − |
|---|---|---|
| src/backend/utils/init/miscinit.c | 2 | 2 |
| src/bin/pg_ctl/pg_ctl.c | 1 | 1 |
From 031944d8045f13df474d307608a2246306b06f2e Mon Sep 17 00:00:00 2001 From: Max Johnson <max.johnson@novatechautomation.com> Date: Wed, 25 Sep 2024 10:05:46 -0500 Subject: [PATCH] pg_ctl/miscinit: don't cast MyStartTime to long. The start time variable needs to be 64 bits wide on all platforms in order to support dates past 01/19/2038. This patch fixes an overflow error on 32-bit systems with the start time in "postmaster.pid", which causes pg_ctl to hang. Don't cast MyStartTime to long. Signed-off-by: Max Johnson <max.johnson@novatechautomation.com> --- src/backend/utils/init/miscinit.c | 4 ++-- src/bin/pg_ctl/pg_ctl.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 1f0b3175ae..33f8f49fa2 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -1205,10 +1205,10 @@ CreateLockFile(const char *filename, bool amPostmaster, * both datadir and socket lockfiles; although more stuff may get added to * the datadir lockfile later. */ - snprintf(buffer, sizeof(buffer), "%d\n%s\n%ld\n%d\n%s\n", + snprintf(buffer, sizeof(buffer), "%d\n%s\n"INT64_FORMAT"\n%d\n%s\n", amPostmaster ? (int) my_pid : -((int) my_pid), DataDir, - (long) MyStartTime, + MyStartTime, PostPortNumber, socketDir); diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index f9e0ee4eee..e138c5b236 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -624,7 +624,7 @@ wait_for_postmaster_start(pgpid_t pm_pid, bool do_checkpoint) * Allow 2 seconds slop for possible cross-process clock skew. */ pmpid = atol(optlines[LOCK_FILE_LINE_PID - 1]); - pmstart = atol(optlines[LOCK_FILE_LINE_START_TIME - 1]); + pmstart = atoll(optlines[LOCK_FILE_LINE_START_TIME - 1]); if (pmstart >= start_time - 2 && #ifndef WIN32 pmpid == pm_pid -- 2.34.1