Fix local pgstat entry leak on OOM during entry creation When pgstat_init_entry() fails due to an OOM in the DSA allocation, pgstat_get_entry_ref() cleaned up the shared hashtable but forgot to remove the local reference that pgstat_get_entry_ref_cached() had already inserted into pgStatEntryRefHash.
Missing this cleanup would leave a backend with a stale local cache entry whose entry_ref points to a NULL shared_stats. If pgstat_gc_entry_refs() runs with this reference still around, it would crash due to a pointer dereference. The local reference is now removed before removing the shared entry, the order being sensitive to pending interrupts. Oversight in 8191e0c16a03. Author: Niall Newman <[email protected]> Discussion: https://postgr.es/m/[email protected] Backpatch-through: 15 Branch ------ REL_18_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/2fd8d45ecf7cee94613483f073c821b8834426c7 Modified Files -------------- src/backend/utils/activity/pgstat_shmem.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
