diff options
author | Heikki Linnakangas | 2009-03-18 19:27:28 +0000 |
---|---|---|
committer | Heikki Linnakangas | 2009-03-18 19:27:28 +0000 |
commit | 8ff044cdbc11fcee6fde6a236c5efaca7ccd9296 (patch) | |
tree | 67eaafc489d0f7c04a25967b6f0f46d60baeba0c | |
parent | 1e224980ef6748a22bcb8068015c1a01a7747a38 (diff) |
Don't intercept SIGQUIT as a signal to trigger failover; that's what
postmaster uses for immediate shutdown. Trap SIGUSR1 as the preferred
signal for that.
Per report by Fujii Masao and subsequent discussion on -hackers.
-rw-r--r-- | contrib/pg_standby/pg_standby.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/contrib/pg_standby/pg_standby.c b/contrib/pg_standby/pg_standby.c index ed3c59bdd9..8213c6d541 100644 --- a/contrib/pg_standby/pg_standby.c +++ b/contrib/pg_standby/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) { |