mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
Avoid GatherMerge crash when there are no workers.
It's unnecessary to return an actual slot when we have no tuple. We can just return NULL, which avoids the risk of indexing into an array that might not contain any elements. Rushabh Lathia, per a report from Tomas Vondra Discussion: http://postgr.es/m/6ecd6f17-0dcf-1de7-ded8-0de7db1ddc88@2ndquadrant.com
This commit is contained in:
parent
7d8f6986b8
commit
25dc142a49
@ -419,10 +419,9 @@ reread:
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear out the tuple table slots for each gather merge input,
|
||||
* and return a cleared slot.
|
||||
* Clear out the tuple table slots for each gather merge input.
|
||||
*/
|
||||
static TupleTableSlot *
|
||||
static void
|
||||
gather_merge_clear_slots(GatherMergeState *gm_state)
|
||||
{
|
||||
int i;
|
||||
@ -437,9 +436,6 @@ gather_merge_clear_slots(GatherMergeState *gm_state)
|
||||
pfree(gm_state->gm_tuple_buffers);
|
||||
/* Free the binaryheap, which was created for sort */
|
||||
binaryheap_free(gm_state->gm_heap);
|
||||
|
||||
/* return any clear slot */
|
||||
return gm_state->gm_slots[0];
|
||||
}
|
||||
|
||||
/*
|
||||
@ -479,7 +475,8 @@ gather_merge_getnext(GatherMergeState *gm_state)
|
||||
if (binaryheap_empty(gm_state->gm_heap))
|
||||
{
|
||||
/* All the queues are exhausted, and so is the heap */
|
||||
return gather_merge_clear_slots(gm_state);
|
||||
gather_merge_clear_slots(gm_state);
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user