From 48912acc089a6148529f12ab0a75b1bf026f231d Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Wed, 4 Nov 2009 12:51:30 +0000
Subject: [PATCH] Disable triggering failover with a signal in pg_standby on
 Windows, because Windows doesn't do signal processing like other platforms
 do. It never really worked, but recent changes to the signal handling made it
 crash.

This fixes bug #4961. Patch by Fujii Masao.
---
 contrib/pg_standby/pg_standby.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/contrib/pg_standby/pg_standby.c b/contrib/pg_standby/pg_standby.c
index eb22f73e8ee..7df15a978ac 100644
--- a/contrib/pg_standby/pg_standby.c
+++ b/contrib/pg_standby/pg_standby.c
@@ -1,5 +1,5 @@
 /*
- * $PostgreSQL: pgsql/contrib/pg_standby/pg_standby.c,v 1.26 2009/06/25 19:33:25 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/pg_standby/pg_standby.c,v 1.27 2009/11/04 12:51:30 heikki Exp $
  *
  *
  * pg_standby.c
@@ -56,7 +56,9 @@ bool		debug = false;		/* are we debugging? */
 bool		need_cleanup = false;		/* do we need to remove files from
 										 * archive? */
 
+#ifndef WIN32
 static volatile sig_atomic_t signaled = false;
+#endif
 
 char	   *archiveLocation;	/* where to find the archive? */
 char	   *triggerPath;		/* where to find the trigger file? */
@@ -535,13 +537,13 @@ usage(void)
 	printf("\nReport bugs to <pgsql-bugs@postgresql.org>.\n");
 }
 
+#ifndef WIN32
 static void
 sighandler(int sig)
 {
 	signaled = true;
 }
 
-#ifndef WIN32
 /* We don't want SIGQUIT to core dump */
 static void
 sigquit_handler(int sig)
@@ -573,6 +575,7 @@ main(int argc, char **argv)
 		}
 	}
 
+#ifndef WIN32
 	/*
 	 * You can send SIGUSR1 to trigger failover.
 	 *
@@ -584,10 +587,11 @@ main(int argc, char **argv)
 	 * out to be a bad idea because postmaster uses SIGQUIT to request
 	 * immediate shutdown. We still trap SIGINT, but that may change in a
 	 * future release.
+	 *
+	 * There's no way to trigger failover via signal on Windows.
 	 */
 	(void) signal(SIGUSR1, sighandler);
 	(void) signal(SIGINT, sighandler);	/* deprecated, use SIGUSR1 */
-#ifndef WIN32
 	(void) signal(SIGQUIT, sigquit_handler);
 #endif
 
@@ -763,6 +767,7 @@ main(int argc, char **argv)
 	{
 		/* Check for trigger file or signal first */
 		CheckForExternalTrigger();
+#ifndef WIN32
 		if (signaled)
 		{
 			Failover = FastFailover;
@@ -772,6 +777,7 @@ main(int argc, char **argv)
 				fflush(stderr);
 			}
 		}
+#endif
 
 		/*
 		 * Check for fast failover immediately, before checking if the
-- 
GitLab