diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-04-22 22:33:35 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-04-22 22:33:35 -0400 |
commit | c6a4ace5bf839b2480e8bb4c36bd3ec850c55c65 (patch) | |
tree | 13e5ded86ffa0878addfe43fa24f7c13d349b3d4 /src | |
parent | cee850c403c9dde121dde042334554167f79d989 (diff) | |
download | postgresql-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.c | 9 |
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); } |