Hi there,

I have amended my patch to reflect the changes that were discussed and have 
verified on my system that it works the same as before. I have also fixed a 
typo and changed the name of the patch to more accurately reflect what it does 
now. Please let me know if there is anything else you'd like me to do.

Thanks again,


Max Johnson

Embedded Linux Engineer I

​

NovaTech, LLC

13555 W. 107th Street | Lenexa, KS 66215 ​

O: 913.451.1880

M: 913.742.4580​

novatechautomation.com<http://www.novatechautomation.com/> | 
NovaTechLinkedIn<https://www.linkedin.com/company/565017>


NovaTech Automation is Net Zero committed. 
#KeepItCool<https://www.keepitcool.earth/>

Receipt of this email implies compliance with our terms and 
conditions<https://www.novatechautomation.com/email-terms-conditions>.

________________________________
From: Nathan Bossart <nathandboss...@gmail.com>
Sent: Tuesday, September 24, 2024 3:58 PM
To: Tom Lane <t...@sss.pgh.pa.us>
Cc: Max Johnson <max.john...@novatechautomation.com>; 
pgsql-hack...@postgresql.org <pgsql-hack...@postgresql.org>
Subject: Re: pg_ctl/miscinit: print "MyStartTime" as a long long instead of 
long to avoid 2038 problem.

On Tue, Sep 24, 2024 at 04:44:41PM -0400, Tom Lane wrote:
> Nathan Bossart <nathandboss...@gmail.com> writes:
>> I think we should use INT64_FORMAT here.  That'll choose the right length
>> modifier for the platform.  And I don't think we need to cast MyStartTime,
>> since it's a pg_time_t (which is just an int64).
>
> Agreed.  However, a quick grep finds half a dozen other places that
> are casting MyStartTime to long.  We should fix them all.

+1

> Also note that if any of the other places are using translatable
> format strings, INT64_FORMAT is problematic in that context, and
> "long long" is a better answer for them.

At a glance, I'm not seeing any translatable format strings that involve
MyStartTime.  But that is good to know...

--
nathan
From 031944d8045f13df474d307608a2246306b06f2e Mon Sep 17 00:00:00 2001
From: Max Johnson <max.john...@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.john...@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

Reply via email to