From: Robert Haas Date: Fri, 14 Oct 2011 15:35:40 +0000 (-0400) Subject: Avoid potential relcache leak in objectaddress.c. X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=393e828e31a27845def4c3ff20cdfbee5cec1da9;p=users%2Fhanada%2Fpostgres.git 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. --- 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. */