Send all outstanding WAL before exiting when smart shutdown is requested.
authorHeikki Linnakangas
Mon, 31 May 2010 10:44:37 +0000 (10:44 +0000)
committerHeikki Linnakangas
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);