diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index da7a6c84446effb58277aa497ca9e28f7310e564..d05a588b3aec45a8b50e6a4692d86584f65b9777 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -420,15 +420,20 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
 			if (standby_message_timeout)
 			{
 				TimestampTz targettime;
+				long		secs;
+				int			usecs;
 
 				targettime = TimestampTzPlusMilliseconds(last_status,
 												standby_message_timeout - 1);
 				localTimestampDifference(now,
 										 targettime,
-										 &timeout.tv_sec,
-										 (int *) &timeout.tv_usec);
-				if (timeout.tv_sec <= 0)
+										 &secs,
+										 &usecs);
+				if (secs <= 0)
 					timeout.tv_sec = 1; /* Always sleep at least 1 sec */
+				else
+					timeout.tv_sec = secs;
+				timeout.tv_sec = usecs;
 				timeoutptr = &timeout;
 			}
 			else