diff --git a/src/backend/main/main.c b/src/backend/main/main.c
index 582198fbe15a2afafc51437c87ca3e81a9e13967..2f07a58a4c89b5d45606b14f1b0f697db6a23bda 100644
--- a/src/backend/main/main.c
+++ b/src/backend/main/main.c
@@ -261,12 +261,6 @@ startup_hacks(const char *progname)
 
 		/* In case of general protection fault, don't show GUI popup box */
 		SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
-
-#ifndef HAVE_GETTIMEOFDAY
-		/* Figure out which syscall to use to capture timestamp information */
-		init_win32_gettimeofday();
-#endif
-
 	}
 #endif   /* WIN32 */
 
diff --git a/src/include/port.h b/src/include/port.h
index 26d7fcd6721d60d2e5374ecf4563f110bba4a5ec..a1ab42e3da66482d30217120d220c04f61dd869b 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -328,8 +328,6 @@ extern FILE *pgwin32_popen(const char *command, const char *type);
 #ifndef HAVE_GETTIMEOFDAY
 /* Last parameter not used */
 extern int	gettimeofday(struct timeval * tp, struct timezone * tzp);
-/* On windows we need to call some backend start setup for accurate timing */
-extern void init_win32_gettimeofday(void);
 #endif
 #else							/* !WIN32 */
 
diff --git a/src/port/gettimeofday.c b/src/port/gettimeofday.c
index eabf161e04a14d960d1835e9e8a93b1bb78d420e..c700d997c9ccf8842da6e7076bdb3668af706fb0 100644
--- a/src/port/gettimeofday.c
+++ b/src/port/gettimeofday.c
@@ -30,6 +30,7 @@
 
 #include <sys/time.h>
 
+static void init_gettimeofday(LPFILETIME lpSystemTimeAsFileTime);
 
 /* FILETIME of Jan 1 1970 00:00:00, the PostgreSQL epoch */
 static const unsigned __int64 epoch = UINT64CONST(116444736000000000);
@@ -49,14 +50,15 @@ static const unsigned __int64 epoch = UINT64CONST(116444736000000000);
 typedef VOID (WINAPI *PgGetSystemTimeFn)(LPFILETIME);
 
 /* Storage for the function we pick at runtime */
-static PgGetSystemTimeFn pg_get_system_time = NULL;
+static PgGetSystemTimeFn pg_get_system_time = &init_gettimeofday;
 
 /*
- * During backend startup, determine if GetSystemTimePreciseAsFileTime is
- * available and use it; if not, fall back to GetSystemTimeAsFileTime.
+ * One time initializer.  Determine whether GetSystemTimePreciseAsFileTime
+ * is available and if so, plan to use it; if not, fall back to
+ * GetSystemTimeAsFileTime.
  */
-void
-init_win32_gettimeofday(void)
+static void
+init_gettimeofday(LPFILETIME lpSystemTimeAsFileTime)
 {
 	/*
 	 * Because it's guaranteed that kernel32.dll will be linked into our
@@ -80,14 +82,16 @@ init_win32_gettimeofday(void)
 		 * The expected error from GetLastError() is ERROR_PROC_NOT_FOUND, if
 		 * the function isn't present. No other error should occur.
 		 *
-		 * It's too early in startup to elog(...) if we get some unexpected
-		 * error, and not serious enough to warrant a fprintf to stderr about
-		 * it or save the error and report it later. So silently fall back to
+		 * We can't report an error here because this might be running in
+		 * frontend code; and even if we're in the backend, it's too early
+		 * to elog(...) if we get some unexpected error.  Also, it's not a
+		 * serious problem, so just silently fall back to
 		 * GetSystemTimeAsFileTime irrespective of why the failure occurred.
 		 */
 		pg_get_system_time = &GetSystemTimeAsFileTime;
 	}
 
+	(*pg_get_system_time)(lpSystemTimeAsFileTime);
 }
 
 /*