aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-08-31 16:23:20 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2022-08-31 16:23:20 -0400
commit0c599e748f2c81e415bb39567c4fd40a6bc64815 (patch)
treeefcf2db2aaaf9676e5bf7d3a476b32300d459c6a /src
parent61f6e5c2360382be99846be904af33e3406c938a (diff)
downloadpostgresql-0c599e748f2c81e415bb39567c4fd40a6bc64815.tar.gz
postgresql-0c599e748f2c81e415bb39567c4fd40a6bc64815.zip
Prevent long-term memory leakage in autovacuum launcher.
get_database_list() failed to restore the caller's memory context, instead leaving current context set to TopMemoryContext which is how CommitTransactionCommand() leaves it. The callers both think they are using short-lived contexts, for the express purpose of not having to worry about cleaning up individual allocations. The net effect therefore is that supposedly short-lived allocations could accumulate indefinitely in the launcher's TopMemoryContext. Although this has been broken for a long time, it seems we didn't have any obvious memory leak here until v15's rearrangement of the stats logic. I (tgl) am not entirely convinced that there's no other leak at all, though, and we're surely at risk of adding one in future back-patched fixes. So back-patch to all supported branches, even though this may be only a latent bug in pre-v15. Reid Thompson Discussion: https://postgr.es/m/972a4e12b68b0f96db514777a150ceef7dcd2e0f.camel@crunchydata.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/autovacuum.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 70a9176c54c..171122d394b 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -1941,6 +1941,9 @@ get_database_list(void)
CommitTransactionCommand();
+ /* Be sure to restore caller's memory context */
+ MemoryContextSwitchTo(resultcxt);
+
return dblist;
}