aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/replication/logical/origin.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index 4ee19e9f50d..01f88eaca89 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -148,7 +148,9 @@ typedef struct ReplicationStateOnDisk
typedef struct ReplicationStateCtl
{
+ /* Tranche to use for per-origin LWLocks */
int tranche_id;
+ /* Array of length max_replication_slots */
ReplicationState states[FLEXIBLE_ARRAY_MEMBER];
} ReplicationStateCtl;
@@ -165,6 +167,10 @@ TimestampTz replorigin_session_origin_timestamp = 0;
* max_replication_slots?
*/
static ReplicationState *replication_states;
+
+/*
+ * Actual shared memory block (replication_states[] is now part of this).
+ */
static ReplicationStateCtl *replication_states_ctl;
/*
@@ -480,7 +486,7 @@ ReplicationOriginShmemSize(void)
/*
* XXX: max_replication_slots is arguably the wrong thing to use, as here
* we keep the replay state of *remote* transactions. But for now it seems
- * sufficient to reuse it, lest we introduce a separate GUC.
+ * sufficient to reuse it, rather than introduce a separate GUC.
*/
if (max_replication_slots == 0)
return size;
@@ -510,9 +516,9 @@ ReplicationOriginShmemInit(void)
{
int i;
- replication_states_ctl->tranche_id = LWTRANCHE_REPLICATION_ORIGIN;
+ MemSet(replication_states_ctl, 0, ReplicationOriginShmemSize());
- MemSet(replication_states, 0, ReplicationOriginShmemSize());
+ replication_states_ctl->tranche_id = LWTRANCHE_REPLICATION_ORIGIN;
for (i = 0; i < max_replication_slots; i++)
{