aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2020-06-01 14:41:25 +0900
committerMichael Paquier <michael@paquier.xyz>2020-06-01 14:41:25 +0900
commit894041eb262fa3c730db11bbd6a93798a905556c (patch)
tree5d30160dd599aacbd92252b7ca54a99a290f131d
parent95e389b3c2ea35ad60419f285fd5c1d0511142e7 (diff)
downloadpostgresql-894041eb262fa3c730db11bbd6a93798a905556c.tar.gz
postgresql-894041eb262fa3c730db11bbd6a93798a905556c.zip
Fix use-after-release mistake in currtid() and currtid2() for views
This issue has been present since the introduction of this code as of a3519a2 from 2002, and has been found by buildfarm member prion that uses RELCACHE_FORCE_RELEASE via the tests introduced recently in e786be5. Discussion: https://postgr.es/m/20200601022055.GB4121@paquier.xyz Backpatch-through: 9.5
-rw-r--r--src/backend/utils/adt/tid.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c
index d301c4e2a7b..e12ec29222b 100644
--- a/src/backend/utils/adt/tid.c
+++ b/src/backend/utils/adt/tid.c
@@ -338,8 +338,13 @@ currtid_for_view(Relation viewrel, ItemPointer tid)
rte = rt_fetch(var->varno, query->rtable);
if (rte)
{
+ Datum result;
+
+ result = DirectFunctionCall2(currtid_byreloid,
+ ObjectIdGetDatum(rte->relid),
+ PointerGetDatum(tid));
table_close(viewrel, AccessShareLock);
- return DirectFunctionCall2(currtid_byreloid, ObjectIdGetDatum(rte->relid), PointerGetDatum(tid));
+ return result;
}
}
}