From: Simon Riggs Date: Sun, 16 Sep 2012 18:53:34 +0000 (+0100) Subject: Fix bufmgr so CHECKPOINT_END_OF_RECOVERY behaves as a shutdown checkpoint. X-Git-Tag: REL9_3_BETA1~903 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=64e196b6efbd58893a4381013a35c84b167b4856;p=postgresql Fix bufmgr so CHECKPOINT_END_OF_RECOVERY behaves as a shutdown checkpoint. Recovery code documents clearly that a shutdown checkpoint is executed at end of recovery - a shutdown checkpoint WAL record is written but the buffer manager had been altered to treat end of recovery as a normal checkpoint. This bug exacerbates the bufmgr relpersistence bug. Bug spotted by Andres Freund, patch by me. --- diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index ff92360155..56095b3250 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -1206,9 +1206,9 @@ BufferSync(int flags) /* * Unless this is a shutdown checkpoint, we write only permanent, dirty - * buffers. But at shutdown time, we write all dirty buffers. + * buffers. But at shutdown or end of recovery, we write all dirty buffers. */ - if (!(flags & CHECKPOINT_IS_SHUTDOWN)) + if (!((flags & CHECKPOINT_IS_SHUTDOWN) || (flags & CHECKPOINT_END_OF_RECOVERY))) mask |= BM_PERMANENT; /*