From 7ae2db1d1e7bc95ef8cee380d549dd03a2f8ce88 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Tue, 14 Feb 2012 21:53:17 -0500
Subject: [PATCH] Try to get pg_test_thread to compile on Windows by using a
 sleeper thread.

---
 contrib/pg_test_fsync/pg_test_fsync.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/contrib/pg_test_fsync/pg_test_fsync.c
index 02a9e2112fd..c2867f5892d 100644
--- a/contrib/pg_test_fsync/pg_test_fsync.c
+++ b/contrib/pg_test_fsync/pg_test_fsync.c
@@ -28,12 +28,26 @@
 #define OPS_FORMAT			"%9.3f ops/sec"
 
 /* These are macros to avoid timing the function call overhead. */
+#ifndef WIN32
 #define START_TIMER	\
 do { \
 	alarm_triggered = false; \
 	alarm(secs_per_test); \
 	gettimeofday(&start_t, NULL); \
 } while (0)
+#else
+#define START_TIMER	\
+do { \
+	alarm_triggered = false; \
+	if (CreateThread(NULL, 0, process_alarm, NULL, 0, NULL) == \
+		INVALID_HANDLE_VALUE) \
+	{ \
+		fprintf(stderr, "Cannot create thread for alarm\n"); \
+		exit(1); \
+	} \
+	gettimeofday(&start_t, NULL); \
+} while (0)
+#endif
 
 #define STOP_TIMER	\
 do { \
@@ -82,7 +96,9 @@ main(int argc, char *argv[])
 	/* Prevent leaving behind the test file */
 	signal(SIGINT, signal_cleanup);
 	signal(SIGTERM, signal_cleanup);
+#ifndef WIN32
 	signal(SIGALRM, process_alarm);
+#endif
 #ifdef SIGHUP
 	/* Not defined on win32 */
 	signal(SIGHUP, signal_cleanup);
@@ -553,7 +569,13 @@ print_elapse(struct timeval start_t, struct timeval stop_t, int ops)
 static void
 process_alarm(int sig)
 {
+#ifdef WIN32
+	sleep(secs_per_test);
+#endif
 	alarm_triggered = true;
+#ifdef WIN32
+	ExitThread(0);
+#endif
 }
 
 static void
-- 
GitLab