diff options
author | Simon Riggs <simon@2ndQuadrant.com> | 2012-09-16 19:53:34 +0100 |
---|---|---|
committer | Simon Riggs <simon@2ndQuadrant.com> | 2012-09-16 19:53:34 +0100 |
commit | 64e196b6efbd58893a4381013a35c84b167b4856 (patch) | |
tree | 40c94f8cd016a3a6cd0b71719d668abd99b431e7 /src/backend/storage/buffer/bufmgr.c | |
parent | 327542645e698a4c85dde8229c21361f96688808 (diff) | |
download | postgresql-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.c | 4 |
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; /* |