]> granicus.if.org Git - postgresql/commitdiff
If a shutdown request comes in while we're still starting up, don't
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Feb 2003 04:48:19 +0000 (04:48 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Feb 2003 04:48:19 +0000 (04:48 +0000)
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.

src/backend/postmaster/postmaster.c

index 85a11ce8a433100ed196fa8d0c02163db0a50d0a..3ce63e05d63a8b8b948d55c2f02e9a782b09a412 100644 (file)
@@ -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;
                }