From 02ddf657ce149fc48e8807d07a6e316e8c647a01 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 6 Nov 2014 15:24:07 +0200 Subject: [PATCH] Add assertion for duplicate buffer registrations. --- src/backend/access/transam/xloginsert.c | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index efc161ba9d..f5e1c4fa3d 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -216,6 +216,26 @@ XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags) regbuf->rdata_tail = (XLogRecData *) ®buf->rdata_head; regbuf->rdata_sz = 0; + /* + * Check that this page, or some other page with the same block_id, + * hasn't already been registered. + */ +#ifdef USE_ASSERT_CHECKING + { + int i; + + for (i = 0; i < num_registered_buffers; i++) + { + registered_buffer *regbuf_old = ®istered_buffers[i]; + + Assert (regbuf_old->block_id != block_id); + Assert (!RelFileNodeEquals(regbuf_old->rnode, regbuf->rnode) || + regbuf_old->forkno != regbuf->forkno || + regbuf_old->block != regbuf->block); + } + } +#endif + num_registered_buffers++; } @@ -247,6 +267,26 @@ XLogRegisterBlock(uint8 block_id, RelFileNode *rnode, ForkNumber forknum, regbuf->rdata_tail = (XLogRecData *) ®buf->rdata_head; regbuf->rdata_sz = 0; + /* + * Check that this page, or some other page with the same block_id, + * hasn't already been registered. + */ +#ifdef USE_ASSERT_CHECKING + { + int i; + + for (i = 0; i < num_registered_buffers; i++) + { + registered_buffer *regbuf_old = ®istered_buffers[i]; + + Assert (regbuf_old->block_id != block_id); + Assert (!RelFileNodeEquals(regbuf_old->rnode, regbuf->rnode) || + regbuf_old->forkno != regbuf->forkno || + regbuf_old->block != regbuf->block); + } + } +#endif + num_registered_buffers++; } -- 2.39.5