mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	Acquire spinlock when updating 2PC slot data during logical decoding creation
The creation of a logical decoding context in CreateDecodingContext() updates some data of its slot for two-phase transactions if enabled by the caller, but the code forgot to acquire a spinlock when updating these fields like any other code paths. This could lead to the read of inconsistent data. Oversight in a8fd13c. Author: Sawada Masahiko Discussion: https://postgr.es/m/CAD21AoAD8_fp47191LKuecjDd3DYhoQ4TaucFco1_TEr_jQ-Zw@mail.gmail.com Backpatch-through: 15
This commit is contained in:
		
							parent
							
								
									f0e6d6d3c9
								
							
						
					
					
						commit
						5ad165d2c0
					
				@ -555,8 +555,10 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 | 
			
		||||
	/* Mark slot to allow two_phase decoding if not already marked */
 | 
			
		||||
	if (ctx->twophase && !slot->data.two_phase)
 | 
			
		||||
	{
 | 
			
		||||
		SpinLockAcquire(&slot->mutex);
 | 
			
		||||
		slot->data.two_phase = true;
 | 
			
		||||
		slot->data.two_phase_at = start_lsn;
 | 
			
		||||
		SpinLockRelease(&slot->mutex);
 | 
			
		||||
		ReplicationSlotMarkDirty();
 | 
			
		||||
		ReplicationSlotSave();
 | 
			
		||||
		SnapBuildSetTwoPhaseAt(ctx->snapshot_builder, start_lsn);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user