diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-12-04 10:33:09 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-12-04 10:39:24 -0500 |
commit | 9f4992e2a9939a4c3d560c2ac58067861ee0029a (patch) | |
tree | 17585b681afb8a5b635c1b6f354c43a4c7a8bc4c /src/backend/executor/nodeGatherMerge.c | |
parent | a852cfe96752b25c2deaa2653cffd60c0ec82ead (diff) | |
download | postgresql-9f4992e2a9939a4c3d560c2ac58067861ee0029a.tar.gz postgresql-9f4992e2a9939a4c3d560c2ac58067861ee0029a.zip |
Remove memory leak protection from Gather and Gather Merge nodes.
Before commit 6b65a7fe62e129d5c2b85cd74d6a91d8f7564608, tqueue.c could
perform tuple remapping and thus leak memory, which is why commit
af33039317ddc4a0e38a02e2255c2bf453115fd2 made TupleQueueReaderNext
run in a short-lived context. Now, however, tqueue.c has been reduced
to a shadow of its former self, and there shouldn't be any chance of
leaks any more. Accordingly, remove some tuple copying and memory
context manipulation to speed up processing.
Patch by me, reviewed by Amit Kapila. Some testing by Rafia Sabih.
Discussion: http://postgr.es/m/CAA4eK1LSDydwrNjmYSNkfJ3ZivGSWH9SVswh6QpNzsMdj_oOQA@mail.gmail.com
Diffstat (limited to 'src/backend/executor/nodeGatherMerge.c')
-rw-r--r-- | src/backend/executor/nodeGatherMerge.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/src/backend/executor/nodeGatherMerge.c b/src/backend/executor/nodeGatherMerge.c index 166f2064ff7..4a8a59eabf1 100644 --- a/src/backend/executor/nodeGatherMerge.c +++ b/src/backend/executor/nodeGatherMerge.c @@ -609,7 +609,7 @@ load_tuple_array(GatherMergeState *gm_state, int reader) &tuple_buffer->done); if (!HeapTupleIsValid(tuple)) break; - tuple_buffer->tuple[i] = heap_copytuple(tuple); + tuple_buffer->tuple[i] = tuple; tuple_buffer->nTuples++; } } @@ -673,7 +673,6 @@ gather_merge_readnext(GatherMergeState *gm_state, int reader, bool nowait) &tuple_buffer->done); if (!HeapTupleIsValid(tup)) return false; - tup = heap_copytuple(tup); /* * Attempt to read more tuples in nowait mode and store them in the @@ -703,20 +702,13 @@ gm_readnext_tuple(GatherMergeState *gm_state, int nreader, bool nowait, { TupleQueueReader *reader; HeapTuple tup; - MemoryContext oldContext; - MemoryContext tupleContext; /* Check for async events, particularly messages from workers. */ CHECK_FOR_INTERRUPTS(); /* Attempt to read a tuple. */ reader = gm_state->reader[nreader - 1]; - - /* Run TupleQueueReaders in per-tuple context */ - tupleContext = gm_state->ps.ps_ExprContext->ecxt_per_tuple_memory; - oldContext = MemoryContextSwitchTo(tupleContext); tup = TupleQueueReaderNext(reader, nowait, done); - MemoryContextSwitchTo(oldContext); return tup; } |