Don't intercept SIGQUIT as a signal to trigger failover; that's what
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 18 Mar 2009 19:27:28 +0000 (19:27 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 18 Mar 2009 19:27:28 +0000 (19:27 +0000)
postmaster uses for immediate shutdown. Trap SIGUSR1 as the preferred
signal for that.

Per report by Fujii Masao and subsequent discussion on -hackers.

contrib/pg_standby/pg_standby.c

index eef2e112f3f77c15d6da9692a2bb223bf9fefe57..63d8f80e347b9617c56e785dd69370278db15c1e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $PostgreSQL: pgsql/contrib/pg_standby/pg_standby.c,v 1.18 2009/02/27 09:30:21 petere Exp $ 
+ * $PostgreSQL: pgsql/contrib/pg_standby/pg_standby.c,v 1.19 2009/03/18 19:27:28 heikki Exp $ 
  *
  *
  * pg_standby.c
@@ -463,6 +463,15 @@ sighandler(int sig)
        signaled = true;
 }
 
+/* We don't want SIGQUIT to core dump */
+static void
+sigquit_handler(int sig)
+{
+       signal(SIGINT, SIG_DFL);
+       kill(getpid(), SIGINT);
+}
+
+
 /*------------ MAIN ----------------------------------------*/
 int
 main(int argc, char **argv)
@@ -485,8 +494,21 @@ main(int argc, char **argv)
                }
        }
 
-       (void) signal(SIGINT, sighandler);
-       (void) signal(SIGQUIT, sighandler);
+       /*
+        * You can send SIGUSR1 to trigger failover.
+        *
+        * Postmaster uses SIGQUIT to request immediate shutdown. The default
+        * action is to core dump, but we don't want that, so trap it and
+        * commit suicide without core dump.
+        *
+        * We used to use SIGINT and SIGQUIT to trigger failover, but that
+        * turned 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.
+        */
+       (void) signal(SIGUSR1, sighandler);
+       (void) signal(SIGINT, sighandler); /* deprecated, use SIGUSR1 */
+       (void) signal(SIGQUIT, sigquit_handler);
 
        while ((c = getopt(argc, argv, "cdk:lr:s:t:w:")) != -1)
        {