mirror of
https://github.com/postgres/postgres.git
synced 2025-05-06 19:59:18 +03:00
Ensure gatherstate->nextreader is properly initialized.
The previously code worked OK as long as a Gather node was never rescanned, or if it was rescanned, as long as it got at least as many workers on rescan as it had originally. But if the number of workers ever decreased on a rescan, then it could crash. Andreas Seltenreich
This commit is contained in:
parent
efeb313506
commit
06fa6670fb
@ -172,6 +172,7 @@ ExecGather(GatherState *node)
|
||||
if (pcxt->nworkers_launched > 0)
|
||||
{
|
||||
node->nreaders = 0;
|
||||
node->nextreader = 0;
|
||||
node->reader =
|
||||
palloc(pcxt->nworkers_launched * sizeof(TupleQueueReader *));
|
||||
|
||||
@ -334,6 +335,7 @@ gather_readnext(GatherState *gatherstate)
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
|
||||
/* Attempt to read a tuple, but don't block if none is available. */
|
||||
Assert(gatherstate->nextreader < gatherstate->nreaders);
|
||||
reader = gatherstate->reader[gatherstate->nextreader];
|
||||
tup = TupleQueueReaderNext(reader, true, &readerdone);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user