summaryrefslogtreecommitdiff
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 26f1cb2aca8..981d60f135d 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -144,7 +144,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;
@@ -161,6 +163,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;
/*
@@ -476,7 +482,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;
@@ -506,9 +512,9 @@ ReplicationOriginShmemInit(void)
{
int i;
- replication_states_ctl->tranche_id = LWTRANCHE_REPLICATION_ORIGIN_STATE;
+ MemSet(replication_states_ctl, 0, ReplicationOriginShmemSize());
- MemSet(replication_states, 0, ReplicationOriginShmemSize());
+ replication_states_ctl->tranche_id = LWTRANCHE_REPLICATION_ORIGIN_STATE;
for (i = 0; i < max_replication_slots; i++)
{