pgsql: Prevent memory leaks associated with relcache rd_partcheckstruc

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Prevent memory leaks associated with relcache rd_partcheckstruc
Дата
Msg-id E1hFMMT-0007cf-HA@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Prevent memory leaks associated with relcache rd_partcheck structures.

The original coding of generate_partition_qual() just copied the list
of predicate expressions into the global CacheMemoryContext, making it
effectively impossible to clean up when the owning relcache entry is
destroyed --- the relevant code in RelationDestroyRelation() only managed
to free the topmost List header :-(.  This resulted in a session-lifespan
memory leak whenever a table partition's relcache entry is rebuilt.
Fortunately, that's not normally a large data structure, and rebuilds
shouldn't occur all that often in production situations; but this is
still a bug worth fixing back to v10 where the code was introduced.

To fix, put the cached expression tree into its own small memory context,
as we do with other complicated substructures of relcache entries.
Also, deal more honestly with the case that a partition has an empty
partcheck list; while that probably isn't a case that's very interesting
for production use, it's legal.

In passing, clarify comments about how partitioning-related relcache
data structures are managed, and add some Asserts that we're not leaking
old copies when we overwrite these data fields.

Amit Langote and Tom Lane

Discussion: https://postgr.es/m/7961.1552498252@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/5f1433ac5e7f943b29ef01266b6b8fc915e6b917

Modified Files
--------------
src/backend/partitioning/partdesc.c | 23 +++++++++++++---
src/backend/utils/cache/partcache.c | 54 ++++++++++++++++++++++++++-----------
src/backend/utils/cache/relcache.c  | 20 +++++++++-----
src/include/utils/rel.h             |  6 +++--
4 files changed, 75 insertions(+), 28 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: pgsql: Switch TAP tests of pg_rewind to use a role with minimalpermiss
Следующее
От: Noah Misch
Дата:
Сообщение: pgsql: When Perl "kill(9, ...)" fails, try "pg_ctl kill".