From 80faf47ab5d7ad240c1cef2fa99d521f6ac1058e Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Mon, 21 Nov 2022 16:42:00 +0300 Subject: [PATCH] Fix dangling pointer warning in AnyTableReplicated (#6504) DESCRIPTION: Fixes a potential dangling pointer issue Need to backport to 11.0 & 11.1 since we might want to release packages for debian/bookworm based on those branches in future. --- src/backend/distributed/utils/resource_lock.c | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/backend/distributed/utils/resource_lock.c b/src/backend/distributed/utils/resource_lock.c index eff04d4c9..cc4cb0d88 100644 --- a/src/backend/distributed/utils/resource_lock.c +++ b/src/backend/distributed/utils/resource_lock.c @@ -781,14 +781,7 @@ SerializeNonCommutativeWrites(List *shardIntervalList, LOCKMODE lockMode) static bool AnyTableReplicated(List *shardIntervalList, List **replicatedShardIntervalList) { - if (replicatedShardIntervalList == NULL) - { - /* the caller is not interested in the replicatedShardIntervalList */ - List *localList = NIL; - replicatedShardIntervalList = &localList; - } - - *replicatedShardIntervalList = NIL; + List *localList = NIL; ShardInterval *shardInterval = NULL; foreach_ptr(shardInterval, shardIntervalList) @@ -798,17 +791,22 @@ AnyTableReplicated(List *shardIntervalList, List **replicatedShardIntervalList) Oid relationId = RelationIdForShard(shardId); if (ReferenceTableShardId(shardId)) { - *replicatedShardIntervalList = - lappend(*replicatedShardIntervalList, LoadShardInterval(shardId)); + localList = + lappend(localList, LoadShardInterval(shardId)); } else if (!SingleReplicatedTable(relationId)) { - *replicatedShardIntervalList = - lappend(*replicatedShardIntervalList, LoadShardInterval(shardId)); + localList = + lappend(localList, LoadShardInterval(shardId)); } } - return list_length(*replicatedShardIntervalList) > 0; + if (replicatedShardIntervalList != NULL) + { + *replicatedShardIntervalList = localList; + } + + return list_length(localList) > 0; }