diff --git a/src/backend/utils/cache/fcache.c b/src/backend/utils/cache/fcache.c index 33528d7bb20b8ff98438bc996b9fb11a89f1ffa0..867de40baa92e0332d3c60e70c7974ad98eda7cd 100644 --- a/src/backend/utils/cache/fcache.c +++ b/src/backend/utils/cache/fcache.c @@ -8,12 +8,13 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.31 2000/05/28 17:56:06 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.32 2000/06/06 17:44:25 tgl Exp $ * *------------------------------------------------------------------------- */ #include "postgres.h" +#include "access/heapam.h" #include "catalog/pg_language.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" @@ -77,11 +78,13 @@ init_fcache(Oid foid, /* ---------------- * get the procedure tuple corresponding to the given functionOid + * + * NB: use SearchSysCacheTupleCopy to ensure tuple lives long enough * ---------------- */ - procedureTuple = SearchSysCacheTuple(PROCOID, - ObjectIdGetDatum(foid), - 0, 0, 0); + procedureTuple = SearchSysCacheTupleCopy(PROCOID, + ObjectIdGetDatum(foid), + 0, 0, 0); if (!HeapTupleIsValid(procedureTuple)) elog(ERROR, "init_fcache: Cache lookup failed for procedure %u", @@ -245,6 +248,8 @@ init_fcache(Oid foid, else retval->func.fn_addr = (PGFunction) NULL; + heap_freetuple(procedureTuple); + return retval; }