]> granicus.if.org Git - postgresql/commitdiff
Checkpointer starts before bgwriter to avoid missing fsync requests.
authorSimon Riggs <simon@2ndQuadrant.com>
Fri, 1 Jun 2012 07:25:17 +0000 (08:25 +0100)
committerSimon Riggs <simon@2ndQuadrant.com>
Fri, 1 Jun 2012 07:25:17 +0000 (08:25 +0100)
Noted while testing Hot Standby startup.

src/backend/postmaster/postmaster.c

index e400f0a8e15e8d7e02b1d3f5724940c1dd323bf6..830a83f60e00d452b9076342a70b105b2925f80c 100644 (file)
@@ -1378,10 +1378,10 @@ ServerLoop(void)
                if (pmState == PM_RUN || pmState == PM_RECOVERY ||
                        pmState == PM_HOT_STANDBY)
                {
-                       if (BgWriterPID == 0)
-                               BgWriterPID = StartBackgroundWriter();
                        if (CheckpointerPID == 0)
                                CheckpointerPID = StartCheckpointer();
+                       if (BgWriterPID == 0)
+                               BgWriterPID = StartBackgroundWriter();
                }
 
                /*
@@ -2372,10 +2372,10 @@ reaper(SIGNAL_ARGS)
                         * when we entered consistent recovery state.  It doesn't matter
                         * if this fails, we'll just try again later.
                         */
-                       if (BgWriterPID == 0)
-                               BgWriterPID = StartBackgroundWriter();
                        if (CheckpointerPID == 0)
                                CheckpointerPID = StartCheckpointer();
+                       if (BgWriterPID == 0)
+                               BgWriterPID = StartBackgroundWriter();
                        if (WalWriterPID == 0)
                                WalWriterPID = StartWalWriter();
 
@@ -4239,10 +4239,10 @@ sigusr1_handler(SIGNAL_ARGS)
                 * Crank up the background tasks.  It doesn't matter if this fails,
                 * we'll just try again later.
                 */
-               Assert(BgWriterPID == 0);
-               BgWriterPID = StartBackgroundWriter();
                Assert(CheckpointerPID == 0);
                CheckpointerPID = StartCheckpointer();
+               Assert(BgWriterPID == 0);
+               BgWriterPID = StartBackgroundWriter();
 
                pmState = PM_RECOVERY;
        }