@@ -296,9 +296,9 @@ replorigin_session_setup(RepOriginId node)
296
296
SysScanDesc scan ;
297
297
ScanKeyData key ;
298
298
HeapTuple tuple ;
299
- bool start_transaction = !IsTransactionState ();
300
299
XLogRecPtr remote_lsn = InvalidXLogRecPtr ,
301
300
local_lsn = InvalidXLogRecPtr ;
301
+ MemoryContext oldcontext ;
302
302
303
303
Assert (node != InvalidRepNodeId );
304
304
@@ -307,9 +307,6 @@ replorigin_session_setup(RepOriginId node)
307
307
(errcode (ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE ),
308
308
errmsg ("cannot setup replication origin when one is already setup" )));
309
309
310
- if (start_transaction )
311
- StartTransactionCommand ();
312
-
313
310
ensure_replication_origin_relid ();
314
311
315
312
rel = heap_open (ReplicationOriginRelationId , RowExclusiveLock );
@@ -338,20 +335,21 @@ replorigin_session_setup(RepOriginId node)
338
335
systable_endscan (scan );
339
336
heap_close (rel , RowExclusiveLock );
340
337
341
- if (start_transaction )
342
- CommitTransactionCommand ();
343
-
338
+ oldcontext = MemoryContextSwitchTo (CacheMemoryContext );
344
339
session_replication_state = (ReplicationState * ) palloc (sizeof (ReplicationState ));
345
340
session_replication_state -> roident = node ;
346
341
session_replication_state -> remote_lsn = remote_lsn ;
347
342
session_replication_state -> local_lsn = local_lsn ;
343
+ MemoryContextSwitchTo (oldcontext );
348
344
349
345
RegisterXactCallback (session_origin_xact_cb , NULL );
350
346
}
351
347
352
348
void
353
349
replorigin_session_reset (void )
354
350
{
351
+ ReplicationState * local_replication_state = session_replication_state ;
352
+
355
353
if (session_replication_state == NULL )
356
354
ereport (ERROR ,
357
355
(errcode (ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE ),
@@ -361,6 +359,8 @@ replorigin_session_reset(void)
361
359
362
360
session_replication_state -> acquired_by = 0 ;
363
361
session_replication_state = NULL ;
362
+
363
+ pfree (local_replication_state );
364
364
}
365
365
366
366
/*
0 commit comments