Send all outstanding WAL before exiting when smart shutdown is requested.

This was broken by my previous patch to send WAL in smaller batches.

Patch by Fujii Masao.
This commit is contained in:
Heikki Linnakangas 2010-05-31 10:44:37 +00:00
parent bc0f080928
commit e0b581acd2

View File

@ -30,7 +30,7 @@
* *
* *
* IDENTIFICATION * 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) if (ready_to_stop)
{ {
XLogSend(&output_message, &caughtup); if (!XLogSend(&output_message, &caughtup))
shutdown_requested = true; goto eof;
if (caughtup)
shutdown_requested = true;
} }
/* Normal exit from the walsender is here */ /* Normal exit from the walsender is here */
@ -458,7 +460,6 @@ eof:
static void static void
InitWalSnd(void) InitWalSnd(void)
{ {
/* use volatile pointer to prevent code rearrangement */
int i; int i;
/* /*
@ -474,6 +475,7 @@ InitWalSnd(void)
*/ */
for (i = 0; i < max_wal_senders; i++) for (i = 0; i < max_wal_senders; i++)
{ {
/* use volatile pointer to prevent code rearrangement */
volatile WalSnd *walsnd = &WalSndCtl->walsnds[i]; volatile WalSnd *walsnd = &WalSndCtl->walsnds[i];
SpinLockAcquire(&walsnd->mutex); SpinLockAcquire(&walsnd->mutex);