From f0ee42d59b797603d645df8876ae3abf6d016f1e Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 15 Feb 2014 17:09:50 -0500
Subject: [PATCH] Fix unportable coding in DetermineSleepTime().

We should not assume that struct timeval.tv_sec is a long, because
it ain't necessarily.  (POSIX says that it's a time_t, which might
well be 64 bits now or in the future; or for that matter might be
32 bits on machines with 64-bit longs.)  Per buildfarm member panther.

Back-patch to 9.3 where the dubious coding was introduced.
---
 src/backend/postmaster/postmaster.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 6bb2a474857..b7f99fc18d3 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -1462,10 +1462,12 @@ DetermineSleepTime(struct timeval * timeout)
 
 	if (next_wakeup != 0)
 	{
+		long		secs;
 		int			microsecs;
 
 		TimestampDifference(GetCurrentTimestamp(), next_wakeup,
-							&timeout->tv_sec, &microsecs);
+							&secs, &microsecs);
+		timeout->tv_sec = secs;
 		timeout->tv_usec = microsecs;
 
 		/* Ensure we don't exceed one minute */
-- 
GitLab