From 393e828e31a27845def4c3ff20cdfbee5cec1da9 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Fri, 14 Oct 2011 11:35:40 -0400 Subject: [PATCH] Avoid potential relcache leak in objectaddress.c. Nobody using the missing_ok flag yet, but let's speculate that this will be a better interface for future callers. KaiGai Kohei, with some adjustments by me. --- src/backend/catalog/objectaddress.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 6928835b6a..395c11605a 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -639,7 +639,8 @@ get_object_address_relobject(ObjectType objtype, List *objname, * Caller is expecting to get back the relation, even though we * didn't end up using it to find the rule. */ - relation = heap_open(reloid, AccessShareLock); + if (OidIsValid(address.objectId)) + relation = heap_open(reloid, AccessShareLock); } else { @@ -677,6 +678,14 @@ get_object_address_relobject(ObjectType objtype, List *objname, address.objectId = InvalidOid; address.objectSubId = 0; } + + /* Avoid relcache leak when object not found. */ + if (!OidIsValid(address.objectId)) + { + heap_close(relation, AccessShareLock); + relation = NULL; /* department of accident prevention */ + return address; + } } /* Done. */