reinit_recheck.txt
text/plain
Filename: reinit_recheck.txt
Type: text/plain
Part: 0
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;