0002-fix-sshashent-access-segfault-when-it-s-half-initial.patch
application/octet-stream
Filename: 0002-fix-sshashent-access-segfault-when-it-s-half-initial.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0002
Subject: remove pgstate hash entry if pgstat_init_entry errors with OOM
| File | + | − |
|---|---|---|
| src/backend/utils/activity/pgstat_shmem.c | 10 | 1 |
From 53bdecfeb44e6f6dcc7f7fcc20d1569f4d01285b Mon Sep 17 00:00:00 2001
From: Mikhail Kot <to@myrrc.dev>
Date: Wed, 3 Sep 2025 22:34:46 +0100
Subject: [PATCH] remove pgstate hash entry if pgstat_init_entry errors with
OOM
---
src/backend/utils/activity/pgstat_shmem.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c
index 62de3474453..fffa1e56941 100644
--- a/src/backend/utils/activity/pgstat_shmem.c
+++ b/src/backend/utils/activity/pgstat_shmem.c
@@ -508,7 +508,16 @@ pgstat_get_entry_ref(PgStat_Kind kind, Oid dboid, uint64 objid, bool create,
shhashent = dshash_find_or_insert(pgStatLocal.shared_hash, &key, &shfound);
if (!shfound)
{
- shheader = pgstat_init_entry(kind, shhashent);
+ PG_TRY();
+ {
+ shheader = pgstat_init_entry(kind, shhashent);
+ }
+ PG_CATCH();
+ {
+ dshash_delete_entry(pgStatLocal.shared_hash, shhashent);
+ PG_RE_THROW();
+ }
+ PG_END_TRY();
pgstat_acquire_entry_ref(entry_ref, shhashent, shheader);
if (created_entry != NULL)
--
2.47.2