hawq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From odiache...@apache.org
Subject [20/38] incubator-hawq git commit: HAWQ-569. Fixing an assertion failure and a potential double release of workfile_queryspace queryEntry
Date Thu, 31 Mar 2016 00:24:13 GMT
HAWQ-569. Fixing an assertion failure and a potential double release of workfile_queryspace
queryEntry


Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/cfcdbf5f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/cfcdbf5f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/cfcdbf5f

Branch: refs/heads/HAWQ-546
Commit: cfcdbf5fae8a44045fcfe5835a4b40ec6e62415e
Parents: 7ba95a8
Author: Foyzur Rahman <foyzur.rahman@gopivotal.com>
Authored: Mon Feb 29 19:09:48 2016 -0800
Committer: Oleksandr Diachenko <odiachenko@pivotal.io>
Committed: Wed Mar 30 17:23:29 2016 -0700

----------------------------------------------------------------------
 .../utils/workfile_manager/workfile_queryspace.c     | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/cfcdbf5f/src/backend/utils/workfile_manager/workfile_queryspace.c
----------------------------------------------------------------------
diff --git a/src/backend/utils/workfile_manager/workfile_queryspace.c b/src/backend/utils/workfile_manager/workfile_queryspace.c
index a421ceb..7010229 100644
--- a/src/backend/utils/workfile_manager/workfile_queryspace.c
+++ b/src/backend/utils/workfile_manager/workfile_queryspace.c
@@ -302,7 +302,6 @@ WorkfileQueryspace_ReleaseEntry(void)
 	}
 
 	querySpaceNestingLevel--;
-	Assert(querySpaceNestingLevel >= 0);
 
 	if (querySpaceNestingLevel > 0)
 	{
@@ -313,15 +312,25 @@ WorkfileQueryspace_ReleaseEntry(void)
 		return;
 	}
 
+	int session_id = queryEntry->key.session_id;
+	int command_count = queryEntry->key.command_count;
+
 	bool deleted = SyncHTRelease(queryspace_Hashtable, queryEntry);
 
+	/*
+	 * Set the queryEntry to NULL as we may soon CHECK_FOR_INTERRUPTS, which can come back to
this
+	 * method if an ERROR cleanup (e.g., because of a QueryCancelPending) invokes ExecutorEnd.
+	 * We don't want to release our queryEntry again.
+	 */
+	queryEntry = NULL;
+
 	if (deleted)
 	{
 		elog(gp_workfile_caching_loglevel, "Deleted entry for query (sessionid=%d, commandcnt=%d)",
-				queryEntry->key.session_id, queryEntry->key.command_count);
+				session_id, command_count);
 	}
 
-	queryEntry = NULL;
+	Assert(querySpaceNestingLevel >= 0);
 }
 
 /*


Mime
View raw message