aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-02-23 04:48:19 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-02-23 04:48:19 +0000
commit27854915b958b3fd938b2f6c7908d50c32576611 (patch)
treedf0f8cb0093bd3ba219602d56863335de53aebdc /src
parent80d6a277c921454d028e088762bb4a4723f9840e (diff)
downloadpostgresql-27854915b958b3fd938b2f6c7908d50c32576611.tar.gz
postgresql-27854915b958b3fd938b2f6c7908d50c32576611.zip
If a shutdown request comes in while we're still starting up, don't
service it until after we execute SetThisStartUpID(). Else shutdown process will write the wrong SUI into the shutdown checkpoint, which seems likely to be trouble --- although I've not quite figured out how significant it really is.
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/postmaster.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 85a11ce8a43..3ce63e05d63 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.306 2003/01/25 05:19:46 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.307 2003/02/23 04:48:19 tgl Exp $
*
* NOTES
*
@@ -1636,7 +1636,26 @@ reaper(SIGNAL_ARGS)
ExitPostmaster(1);
}
StartupPID = 0;
+
+ /*
+ * Startup succeeded - remember its ID and RedoRecPtr.
+ *
+ * NB: this MUST happen before we fork a checkpoint or shutdown
+ * subprocess, else they will have wrong local ThisStartUpId.
+ */
+ SetThisStartUpID();
+
FatalError = false; /* done with recovery */
+
+ /*
+ * Arrange for first checkpoint to occur after standard delay.
+ */
+ CheckPointPID = 0;
+ checkpointed = time(NULL);
+
+ /*
+ * Go to shutdown mode if a shutdown request was pending.
+ */
if (Shutdown > NoShutdown)
{
if (ShutdownPID > 0)
@@ -1648,17 +1667,6 @@ reaper(SIGNAL_ARGS)
ShutdownPID = ShutdownDataBase();
}
- /*
- * Startup succeeded - remember its ID and RedoRecPtr
- */
- SetThisStartUpID();
-
- /*
- * Arrange for first checkpoint to occur after standard delay.
- */
- CheckPointPID = 0;
- checkpointed = time(NULL);
-
goto reaper_done;
}