Skip to content

Commit 6fae0fa

Browse files
committed
Allocate the session replication state in cache context instead of local one
1 parent 6554a5a commit 6fae0fa

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

compat/pglogical_compat.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,9 @@ replorigin_session_setup(RepOriginId node)
296296
SysScanDesc scan;
297297
ScanKeyData key;
298298
HeapTuple tuple;
299-
bool start_transaction = !IsTransactionState();
300299
XLogRecPtr remote_lsn = InvalidXLogRecPtr,
301300
local_lsn = InvalidXLogRecPtr;
301+
MemoryContext oldcontext;
302302

303303
Assert(node != InvalidRepNodeId);
304304

@@ -307,9 +307,6 @@ replorigin_session_setup(RepOriginId node)
307307
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
308308
errmsg("cannot setup replication origin when one is already setup")));
309309

310-
if (start_transaction)
311-
StartTransactionCommand();
312-
313310
ensure_replication_origin_relid();
314311

315312
rel = heap_open(ReplicationOriginRelationId, RowExclusiveLock);
@@ -338,20 +335,21 @@ replorigin_session_setup(RepOriginId node)
338335
systable_endscan(scan);
339336
heap_close(rel, RowExclusiveLock);
340337

341-
if (start_transaction)
342-
CommitTransactionCommand();
343-
338+
oldcontext = MemoryContextSwitchTo(CacheMemoryContext);
344339
session_replication_state = (ReplicationState *) palloc(sizeof(ReplicationState));
345340
session_replication_state->roident = node;
346341
session_replication_state->remote_lsn = remote_lsn;
347342
session_replication_state->local_lsn = local_lsn;
343+
MemoryContextSwitchTo(oldcontext);
348344

349345
RegisterXactCallback(session_origin_xact_cb, NULL);
350346
}
351347

352348
void
353349
replorigin_session_reset(void)
354350
{
351+
ReplicationState *local_replication_state = session_replication_state;
352+
355353
if (session_replication_state == NULL)
356354
ereport(ERROR,
357355
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
@@ -361,6 +359,8 @@ replorigin_session_reset(void)
361359

362360
session_replication_state->acquired_by = 0;
363361
session_replication_state = NULL;
362+
363+
pfree(local_replication_state);
364364
}
365365

366366
/*

0 commit comments

Comments
 (0)