mirror of
https://github.com/postgres/postgres.git
synced 2025-11-04 20:11:56 +03:00
Allow table AM to store complex data structures in rd_amcache
The new table AM method free_rd_amcache is responsible for freeing all the memory related to rd_amcache and setting free_rd_amcache to NULL. If the new method is not specified, we still assume rd_amcache to be a single chunk of memory, which could be just pfree'd. Discussion: https://postgr.es/m/CAPpHfdurb9ycV8udYqM%3Do0sPS66PJ4RCBM1g-bBpvzUfogY0EA%40mail.gmail.com Reviewed-by: Matthias van de Meent, Mark Dilger, Pavel Borisov Reviewed-by: Nikita Malakhov, Japin Li
This commit is contained in:
11
src/backend/utils/cache/relcache.c
vendored
11
src/backend/utils/cache/relcache.c
vendored
@@ -2262,9 +2262,7 @@ RelationReloadIndexInfo(Relation relation)
|
||||
RelationCloseSmgr(relation);
|
||||
|
||||
/* Must free any AM cached data upon relcache flush */
|
||||
if (relation->rd_amcache)
|
||||
pfree(relation->rd_amcache);
|
||||
relation->rd_amcache = NULL;
|
||||
table_free_rd_amcache(relation);
|
||||
|
||||
/*
|
||||
* If it's a shared index, we might be called before backend startup has
|
||||
@@ -2484,8 +2482,7 @@ RelationDestroyRelation(Relation relation, bool remember_tupdesc)
|
||||
pfree(relation->rd_options);
|
||||
if (relation->rd_indextuple)
|
||||
pfree(relation->rd_indextuple);
|
||||
if (relation->rd_amcache)
|
||||
pfree(relation->rd_amcache);
|
||||
table_free_rd_amcache(relation);
|
||||
if (relation->rd_fdwroutine)
|
||||
pfree(relation->rd_fdwroutine);
|
||||
if (relation->rd_indexcxt)
|
||||
@@ -2547,9 +2544,7 @@ RelationClearRelation(Relation relation, bool rebuild)
|
||||
RelationCloseSmgr(relation);
|
||||
|
||||
/* Free AM cached data, if any */
|
||||
if (relation->rd_amcache)
|
||||
pfree(relation->rd_amcache);
|
||||
relation->rd_amcache = NULL;
|
||||
table_free_rd_amcache(relation);
|
||||
|
||||
/*
|
||||
* Treat nailed-in system relations separately, they always need to be
|
||||
|
||||
Reference in New Issue
Block a user