diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c index 0cdb552631..28d2b20b56 100644 --- a/src/backend/utils/activity/pgstat.c +++ b/src/backend/utils/activity/pgstat.c @@ -1383,7 +1383,6 @@ pgstat_write_statsfile(void) CHECK_FOR_INTERRUPTS(); /* we may have some "dropped" entries not yet removed, skip them */ - Assert(!ps->dropped); if (ps->dropped) continue; diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c index d1149adf70..0476ec2f85 100644 --- a/src/backend/utils/activity/pgstat_shmem.c +++ b/src/backend/utils/activity/pgstat_shmem.c @@ -378,8 +378,19 @@ pgstat_get_entry_ref_cached(PgStat_HashKey key, PgStat_EntryRef **entry_ref_p) Assert(entry_ref->shared_stats != NULL); Assert(entry_ref->shared_stats->magic == 0xdeadbeef); - /* should have at least our reference */ - Assert(pg_atomic_read_u32(&entry_ref->shared_entry->refcount) > 0); + if (entry_ref->shared_entry->key.kind == PGSTAT_KIND_REPLSLOT && + pg_atomic_read_u32(&entry_ref->shared_entry->refcount) > 1) + { + entry_ref->shared_stats = NULL; + entry_ref->shared_entry = NULL; + entry_ref->pending = NULL; + found = false; + } + else + { + /* should have at least our reference */ + Assert(pg_atomic_read_u32(&entry_ref->shared_entry->refcount) > 0); + } } *entry_ref_p = cache_entry->entry_ref;