From 638e922bebd9ee4657e40daa63b61ccac4bd205c Mon Sep 17 00:00:00 2001 From: Ashutosh Bapat Date: Thu, 25 Jun 2020 18:50:52 +0530 Subject: [PATCH] Assert if ExecOpenIndices() is called twice on same result relation. If ExecOpenIndices() is called more than once for the result relation, it overwrites the arrays for indices, leaking memory. Assert would catch this in development. Ashutosh Bapat. --- src/backend/executor/execIndexing.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/executor/execIndexing.c b/src/backend/executor/execIndexing.c index 1862af621b..a94b98b045 100644 --- a/src/backend/executor/execIndexing.c +++ b/src/backend/executor/execIndexing.c @@ -158,6 +158,13 @@ ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative) RelationPtr relationDescs; IndexInfo **indexInfoArray; + /* + * This function can be called only once per ResultRelInfo, otherwise, we + * will leak memory for arrays and also leak index relcache references. + */ + Assert(!resultRelInfo->ri_IndexRelationDescs); + Assert(!resultRelInfo->ri_IndexRelationInfo); + resultRelInfo->ri_NumIndices = 0; /* fast path if no indexes */ -- 2.17.1