From 0a8b9d3b2c57028f7100078cd711370f396d5a81 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 22 Jan 2017 11:47:38 -0500 Subject: [PATCH] Remove no-longer-needed loop in ExecGather(). Coverity complained quite properly that commit ea15e1867 had introduced unreachable code into ExecGather(); to wit, it was no longer possible to iterate the final for-loop more or less than once. So remove the for(). In passing, clean up a couple of comments, and make better use of a local variable. --- src/backend/executor/nodeGather.c | 39 ++++++++++++------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c index 45aa1132d9..a1a3561d48 100644 --- a/src/backend/executor/nodeGather.c +++ b/src/backend/executor/nodeGather.c @@ -135,8 +135,8 @@ ExecGather(GatherState *node) /* * Initialize the parallel context and workers on first execution. We do * this on first execution rather than during node initialization, as it - * needs to allocate large dynamic segment, so it is better to do if it is - * really needed. + * needs to allocate a large dynamic segment, so it is better to do it + * only if it is really needed. */ if (!node->initialized) { @@ -201,32 +201,23 @@ ExecGather(GatherState *node) * any previous tuple returned by a TupleQueueReader; to make sure we * don't leave a dangling pointer around, clear the working slot first. */ - ExecClearTuple(node->funnel_slot); + ExecClearTuple(fslot); econtext = node->ps.ps_ExprContext; ResetExprContext(econtext); - /* Get and return the next tuple, projecting if necessary. */ - for (;;) - { - /* - * Get next tuple, either from one of our workers, or by running the - * plan ourselves. - */ - slot = gather_getnext(node); - if (TupIsNull(slot)) - return NULL; - - /* - * form the result tuple using ExecProject(), and return it --- unless - * the projection produces an empty set, in which case we must loop - * back around for another tuple - */ - econtext->ecxt_outertuple = slot; - - return ExecProject(node->ps.ps_ProjInfo); - } + /* + * Get next tuple, either from one of our workers, or by running the plan + * ourselves. + */ + slot = gather_getnext(node); + if (TupIsNull(slot)) + return NULL; - return slot; + /* + * Form the result tuple using ExecProject(), and return it. + */ + econtext->ecxt_outertuple = slot; + return ExecProject(node->ps.ps_ProjInfo); } /* ---------------------------------------------------------------- -- 2.40.0