aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/buffer/bufmgr.c
diff options
context:
space:
mode:
authorSimon Riggs <simon@2ndQuadrant.com>2012-09-16 19:53:34 +0100
committerSimon Riggs <simon@2ndQuadrant.com>2012-09-16 19:53:34 +0100
commit64e196b6efbd58893a4381013a35c84b167b4856 (patch)
tree40c94f8cd016a3a6cd0b71719d668abd99b431e7 /src/backend/storage/buffer/bufmgr.c
parent327542645e698a4c85dde8229c21361f96688808 (diff)
downloadpostgresql-64e196b6efbd58893a4381013a35c84b167b4856.tar.gz
postgresql-64e196b6efbd58893a4381013a35c84b167b4856.zip
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.
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
-rw-r--r--src/backend/storage/buffer/bufmgr.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index ff92360155d..56095b32501 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;
/*