]> granicus.if.org Git - postgresql/commitdiff
Send all outstanding WAL before exiting when smart shutdown is requested.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 31 May 2010 10:44:37 +0000 (10:44 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 31 May 2010 10:44:37 +0000 (10:44 +0000)
This was broken by my previous patch to send WAL in smaller batches.

Patch by Fujii Masao.

src/backend/replication/walsender.c

index 0d38054008adbdcd84f85ba559bb64d0d5444344..1d3b9aa86105dafcd2cea28b627346cc09271090 100644 (file)
@@ -30,7 +30,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.22 2010/05/26 22:34:49 heikki Exp $
+ *       $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.23 2010/05/31 10:44:37 heikki Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -394,8 +394,10 @@ WalSndLoop(void)
                 */
                if (ready_to_stop)
                {
-                       XLogSend(&output_message, &caughtup);
-                       shutdown_requested = true;
+                       if (!XLogSend(&output_message, &caughtup))
+                               goto eof;
+                       if (caughtup)
+                               shutdown_requested = true;
                }
 
                /* Normal exit from the walsender is here */
@@ -458,7 +460,6 @@ eof:
 static void
 InitWalSnd(void)
 {
-       /* use volatile pointer to prevent code rearrangement */
        int                     i;
 
        /*
@@ -474,6 +475,7 @@ InitWalSnd(void)
         */
        for (i = 0; i < max_wal_senders; i++)
        {
+               /* use volatile pointer to prevent code rearrangement */
                volatile WalSnd *walsnd = &WalSndCtl->walsnds[i];
 
                SpinLockAcquire(&walsnd->mutex);