Fix problems with cached tuple descriptors disappearing while still in use
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 16 Jun 2006 18:42:24 +0000 (18:42 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 16 Jun 2006 18:42:24 +0000 (18:42 +0000)
commitd2248a6a3e53b04a8390efaf44ff60e78b241759
tree12c17a8f366fdeee6717793d87a1723c03e06f30
parenta005f82cf2b0e81ac479ca9c83d5ba085639bd32
Fix problems with cached tuple descriptors disappearing while still in use
by creating a reference-count mechanism, similar to what we did a long time
ago for catcache entries.  The back branches have an ugly solution involving
lots of extra copies, but this way is more efficient.  Reference counting is
only applied to tupdescs that are actually in caches --- there seems no need
to use it for tupdescs that are generated in the executor, since they'll go
away during plan shutdown by virtue of being in the per-query memory context.
Neil Conway and Tom Lane
36 files changed:
src/backend/access/common/tupdesc.c
src/backend/access/heap/tuptoaster.c
src/backend/commands/tablecmds.c
src/backend/executor/execJunk.c
src/backend/executor/execMain.c
src/backend/executor/execQual.c
src/backend/executor/execTuples.c
src/backend/executor/execUtils.c
src/backend/executor/nodeBitmapHeapscan.c
src/backend/executor/nodeFunctionscan.c
src/backend/executor/nodeHashjoin.c
src/backend/executor/nodeIndexscan.c
src/backend/executor/nodeMergejoin.c
src/backend/executor/nodeSeqscan.c
src/backend/executor/nodeSubplan.c
src/backend/executor/nodeSubqueryscan.c
src/backend/executor/nodeTidscan.c
src/backend/optimizer/util/clauses.c
src/backend/parser/parse_coerce.c
src/backend/parser/parse_target.c
src/backend/utils/adt/rowtypes.c
src/backend/utils/adt/ruleutils.c
src/backend/utils/cache/relcache.c
src/backend/utils/cache/typcache.c
src/backend/utils/fmgr/funcapi.c
src/backend/utils/resowner/README
src/backend/utils/resowner/resowner.c
src/include/access/tupdesc.h
src/include/executor/executor.h
src/include/executor/tuptable.h
src/include/utils/resowner.h
src/include/utils/typcache.h
src/pl/plperl/plperl.c
src/pl/plpgsql/src/pl_exec.c
src/pl/plpython/plpython.c
src/pl/tcl/pltcl.c