aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-04-20 16:58:30 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2021-04-20 17:01:49 -0400
commit9e41148229192dccc4bcc40f53af588b73d8ffea (patch)
tree3314c5c3920022d3ad4b76c66cd721a076774d87
parentdb01f797dd48f826c62e1b8eea70f11fe7ff3efc (diff)
downloadpostgresql-9e41148229192dccc4bcc40f53af588b73d8ffea.tar.gz
postgresql-9e41148229192dccc4bcc40f53af588b73d8ffea.zip
Fix under-parenthesized XLogRecHasBlockRef() macro.
Commit f003d9f87 left this macro with inadequate (or, one could say, too much) parenthesization. Which was catastrophic to the correctness of calls such as "if (!XLogRecHasBlockRef(record, 1)) ...". There are only a few of those, which perhaps explains why we didn't notice immediately (with our general weakness of WAL replay testing being another factor). I found it by debugging intermittent replay failures like 2021-04-08 14:33:30.191 EDT [29463] PANIC: failed to locate backup block with ID 1 2021-04-08 14:33:30.191 EDT [29463] CONTEXT: WAL redo at 0/95D3438 for SPGist/ADD_NODE: off 1; blkref #0: rel 1663/16384/25998, blk 1
-rw-r--r--src/include/access/xlogreader.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h
index d5308b25a28..3b8af31a8fe 100644
--- a/src/include/access/xlogreader.h
+++ b/src/include/access/xlogreader.h
@@ -385,8 +385,8 @@ extern bool DecodeXLogRecord(XLogReaderState *state,
#define XLogRecMaxBlockId(decoder) ((decoder)->record->max_block_id)
#define XLogRecGetBlock(decoder, i) (&(decoder)->record->blocks[(i)])
#define XLogRecHasBlockRef(decoder, block_id) \
- ((decoder)->record->max_block_id >= (block_id)) && \
- ((decoder)->record->blocks[block_id].in_use)
+ ((decoder)->record->max_block_id >= (block_id) && \
+ (decoder)->record->blocks[block_id].in_use)
#define XLogRecHasBlockImage(decoder, block_id) \
((decoder)->record->blocks[block_id].has_image)
#define XLogRecBlockImageApply(decoder, block_id) \