mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
Remove memory leak protection from Gather and Gather Merge nodes.
Before commit6b65a7fe62
, tqueue.c could perform tuple remapping and thus leak memory, which is why commitaf33039317
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
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user