From bde39eed0cafb82bc94c40e95d96b5cf47b6f719 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Thu, 22 Oct 2015 10:49:20 -0400
Subject: [PATCH] Fix a couple of bugs in recent parallelism-related commits.

Commit 816e336f12ecabdc834d4cc31bcf966b2dd323dc added the wrong error
check to async.c; sending restrictions is restricted to the leader,
not altogether unsafe.

Commit 3bd909b220930f21d6e15833a17947be749e7fde added ExecShutdownNode
to traverse the planstate tree and call shutdown functions, but made
a Gather node, the only node that actually has such a function, abort
the tree traversal, which is wrong.
---
 src/backend/commands/async.c        | 5 +++--
 src/backend/executor/execProcnode.c | 5 +----
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index 3657d693bf8..5059e3de927 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -117,6 +117,7 @@
 #include <unistd.h>
 #include <signal.h>
 
+#include "access/parallel.h"
 #include "access/slru.h"
 #include "access/transam.h"
 #include "access/xact.h"
@@ -544,8 +545,8 @@ Async_Notify(const char *channel, const char *payload)
 	Notification *n;
 	MemoryContext oldcontext;
 
-	if (IsInParallelMode())
-		elog(ERROR, "cannot send notifications during a parallel operation");
+	if (IsParallelWorker())
+		elog(ERROR, "cannot send notifications from a parallel worker");
 
 	if (Trace_notify)
 		elog(DEBUG1, "Async_Notify(%s)", channel);
diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c
index 5bc1d489421..6f5c5545c92 100644
--- a/src/backend/executor/execProcnode.c
+++ b/src/backend/executor/execProcnode.c
@@ -804,10 +804,7 @@ ExecShutdownNode(PlanState *node)
 	switch (nodeTag(node))
 	{
 		case T_GatherState:
-			{
-				ExecShutdownGather((GatherState *) node);
-				return true;
-			}
+			ExecShutdownGather((GatherState *) node);
 			break;
 		default:
 			break;
-- 
GitLab