aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/postmaster/postmaster.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 59d314a5d4f..d1011062b4d 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.608 2010/05/15 20:01:32 rhaas Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.609 2010/05/26 12:32:41 rhaas Exp $
*
* NOTES
*
@@ -287,6 +287,8 @@ typedef enum
static PMState pmState = PM_INIT;
+static bool ReachedNormalRunning = false; /* T if we've reached PM_RUN */
+
bool ClientAuthInProgress = false; /* T during new-client
* authentication */
@@ -2168,7 +2170,7 @@ pmdie(SIGNAL_ARGS)
(errmsg("received smart shutdown request")));
if (pmState == PM_RUN || pmState == PM_RECOVERY ||
- pmState == PM_HOT_STANDBY)
+ pmState == PM_HOT_STANDBY || pmState == PM_STARTUP)
{
/* autovacuum workers are told to shut down immediately */
SignalAutovacWorkers(SIGTERM);
@@ -2370,6 +2372,7 @@ reaper(SIGNAL_ARGS)
* Startup succeeded, commence normal operations
*/
FatalError = false;
+ ReachedNormalRunning = true;
pmState = PM_RUN;
/*
@@ -3028,9 +3031,15 @@ PostmasterStateMachine(void)
{
/*
* Terminate backup mode to avoid recovery after a clean fast
- * shutdown.
+ * shutdown. Since a backup can only be taken during normal
+ * running (and not, for example, while running under Hot Standby)
+ * it only makes sense to do this if we reached normal running.
+ * If we're still in recovery, the backup file is one we're
+ * recovering *from*, and we must keep it around so that recovery
+ * restarts from the right place.
*/
- CancelBackup();
+ if (ReachedNormalRunning)
+ CancelBackup();
/* Normal exit from the postmaster is here */
ExitPostmaster(0);