aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2024-03-13 07:45:11 +0900
committerMichael Paquier <michael@paquier.xyz>2024-03-13 07:45:11 +0900
commit77cf6a78de9fa48976d8c9152a48290beb06dc8b (patch)
tree5304636ebd879a2e2110954210ac38397f82e78e /src
parent32dd2c1eff540e454d50a1d59d2d90ab6e70e0b6 (diff)
downloadpostgresql-77cf6a78de9fa48976d8c9152a48290beb06dc8b.tar.gz
postgresql-77cf6a78de9fa48976d8c9152a48290beb06dc8b.zip
Add some asserts based on LWLockHeldByMe() for replication slot statistics
Two assertions checking that ReplicationSlotAllocationLock is acquired are added to pgstat_create_replslot() and pgstat_drop_replslot(), corresponding to the routines in charge of the creation and the drop of replication slot statistics. The code previously relied on this assumption and documented it in comments, but did not enforce this policy at runtime. Reviewed-by: Bertrand Drouvot Discussion: https://postgr.es/m/Ze_p-hmD_yFeVYXg@paquier.xyz
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/activity/pgstat_replslot.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/utils/activity/pgstat_replslot.c b/src/backend/utils/activity/pgstat_replslot.c
index c61bad16279..889e86ac5ac 100644
--- a/src/backend/utils/activity/pgstat_replslot.c
+++ b/src/backend/utils/activity/pgstat_replslot.c
@@ -113,6 +113,8 @@ pgstat_create_replslot(ReplicationSlot *slot)
PgStat_EntryRef *entry_ref;
PgStatShared_ReplSlot *shstatent;
+ Assert(LWLockHeldByMeInMode(ReplicationSlotAllocationLock, LW_EXCLUSIVE));
+
entry_ref = pgstat_get_entry_ref_locked(PGSTAT_KIND_REPLSLOT, InvalidOid,
ReplicationSlotIndex(slot), false);
shstatent = (PgStatShared_ReplSlot *) entry_ref->shared_stats;
@@ -153,6 +155,8 @@ pgstat_acquire_replslot(ReplicationSlot *slot)
void
pgstat_drop_replslot(ReplicationSlot *slot)
{
+ Assert(LWLockHeldByMeInMode(ReplicationSlotAllocationLock, LW_EXCLUSIVE));
+
pgstat_drop_entry(PGSTAT_KIND_REPLSLOT, InvalidOid,
ReplicationSlotIndex(slot));
}