aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/slot.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index e100b8c2f3a..8ae0acd61f5 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -263,12 +263,22 @@ ReplicationSlotCreate(const char *name, bool db_specific,
*/
Assert(!slot->in_use);
Assert(slot->active_pid == 0);
- slot->data.persistency = persistency;
- slot->data.xmin = InvalidTransactionId;
- slot->effective_xmin = InvalidTransactionId;
+
+ /* first initialize persistent data */
+ memset(&slot->data, 0, sizeof(ReplicationSlotPersistentData));
StrNCpy(NameStr(slot->data.name), name, NAMEDATALEN);
slot->data.database = db_specific ? MyDatabaseId : InvalidOid;
- slot->data.restart_lsn = InvalidXLogRecPtr;
+ slot->data.persistency = persistency;
+
+ /* and then data only present in shared memory */
+ slot->just_dirtied = false;
+ slot->dirty = false;
+ slot->effective_xmin = InvalidTransactionId;
+ slot->effective_catalog_xmin = InvalidTransactionId;
+ slot->candidate_catalog_xmin = InvalidTransactionId;
+ slot->candidate_xmin_lsn = InvalidXLogRecPtr;
+ slot->candidate_restart_valid = InvalidXLogRecPtr;
+ slot->candidate_restart_lsn = InvalidXLogRecPtr;
/*
* Create the slot on disk. We haven't actually marked the slot allocated