aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-04-22 22:33:35 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2014-04-22 22:33:35 -0400
commitc6a4ace5bf839b2480e8bb4c36bd3ec850c55c65 (patch)
tree13e5ded86ffa0878addfe43fa24f7c13d349b3d4 /src
parentcee850c403c9dde121dde042334554167f79d989 (diff)
downloadpostgresql-c6a4ace5bf839b2480e8bb4c36bd3ec850c55c65.tar.gz
postgresql-c6a4ace5bf839b2480e8bb4c36bd3ec850c55c65.zip
Fix broken logic in logical_heap_rewrite_flush_mappings().
It's blatantly obvious that commit 4d0d607a454ee832574afd52a3c515099cc85eb3 wasn't tested. The leak's real enough, though.
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/rewriteheap.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c
index 4cf07eaa2e4..ef8c12194c7 100644
--- a/src/backend/access/heap/rewriteheap.c
+++ b/src/backend/access/heap/rewriteheap.c
@@ -897,8 +897,7 @@ logical_heap_rewrite_flush_mappings(RewriteState state)
/* write all mappings consecutively */
len = src->num_mappings * sizeof(LogicalRewriteMappingData);
- waldata = palloc(len);
- waldata_start = waldata;
+ waldata_start = waldata = palloc(len);
/*
* collect data we need to write out, but don't modify ondisk data yet
@@ -921,6 +920,9 @@ logical_heap_rewrite_flush_mappings(RewriteState state)
src->num_mappings--;
}
+ Assert(src->num_mappings == 0);
+ Assert(waldata == waldata_start + len);
+
/*
* Note that we deviate from the usual WAL coding practices here,
* check the above "Logical rewrite support" comment for reasoning.
@@ -933,8 +935,6 @@ logical_heap_rewrite_flush_mappings(RewriteState state)
written, len)));
src->off += len;
- Assert(src->num_mappings == 0);
-
rdata[1].data = waldata_start;
rdata[1].len = len;
rdata[1].buffer = InvalidBuffer;
@@ -943,6 +943,7 @@ logical_heap_rewrite_flush_mappings(RewriteState state)
/* write xlog record */
XLogInsert(RM_HEAP2_ID, XLOG_HEAP2_REWRITE, rdata);
+ pfree(waldata_start);
}
Assert(state->rs_num_rewrite_mappings == 0);
}