From 97334ff1ec50f70169a03248371f6ba74d47387f Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Fri, 5 Jul 2019 09:35:53 +0200 Subject: [PATCH] Copy WorkerNode before returning in FindWorkerNode --- src/backend/distributed/utils/node_metadata.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/backend/distributed/utils/node_metadata.c b/src/backend/distributed/utils/node_metadata.c index 3fcbd58d8..a3e32f8ed 100644 --- a/src/backend/distributed/utils/node_metadata.c +++ b/src/backend/distributed/utils/node_metadata.c @@ -764,7 +764,7 @@ get_shard_id_for_distribution_column(PG_FUNCTION_ARGS) WorkerNode * FindWorkerNode(char *nodeName, int32 nodePort) { - WorkerNode *workerNode = NULL; + WorkerNode *cachedWorkerNode = NULL; HTAB *workerNodeHash = GetWorkerNodeHash(); bool handleFound = false; void *hashKey = NULL; @@ -774,10 +774,16 @@ FindWorkerNode(char *nodeName, int32 nodePort) searchedNode->workerPort = nodePort; hashKey = (void *) searchedNode; - workerNode = (WorkerNode *) hash_search(workerNodeHash, hashKey, - HASH_FIND, &handleFound); + cachedWorkerNode = (WorkerNode *) hash_search(workerNodeHash, hashKey, HASH_FIND, + &handleFound); + if (handleFound) + { + WorkerNode *workerNode = (WorkerNode *) palloc(sizeof(WorkerNode)); + memcpy(workerNode, cachedWorkerNode, sizeof(WorkerNode)); + return workerNode; + } - return workerNode; + return NULL; }