mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	XA COMMIT/ROLLBACK of XA transaction owned by different thread may access freed memory if that thread disconnects at the same time. Also concurrent XA COMMIT/ROLLBACK of recovered XA transaction were not serialized properly.
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
--source include/have_debug_sync.inc
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-7793 - Race condition between XA COMMIT/ROLLBACK and disconnect
 | 
						|
--echo #
 | 
						|
--echo # Note that this test is meaningful only with valgrind.
 | 
						|
let $op= XA COMMIT 'xatest';
 | 
						|
let $i= 2;
 | 
						|
while ($i)
 | 
						|
{
 | 
						|
  connect con1, localhost, root;
 | 
						|
  connect con2, localhost, root;
 | 
						|
 | 
						|
  connection con1;
 | 
						|
  XA START 'xatest';
 | 
						|
  XA END 'xatest';
 | 
						|
  XA PREPARE 'xatest';
 | 
						|
 | 
						|
  connection con2;
 | 
						|
  SET debug_sync='xa_after_search SIGNAL parked WAIT_FOR go';
 | 
						|
  send_eval $op;
 | 
						|
 | 
						|
  connection default;
 | 
						|
  SET debug_sync='now WAIT_FOR parked';
 | 
						|
  disconnect con1;
 | 
						|
  disable_query_log;
 | 
						|
  echo # Waiting for thread to get deleted;
 | 
						|
  while (`SELECT VARIABLE_VALUE!=2 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='max_used_connections'`)
 | 
						|
  {
 | 
						|
    real_sleep 0.1;
 | 
						|
    FLUSH STATUS;
 | 
						|
  }
 | 
						|
  enable_query_log;
 | 
						|
  SET debug_sync='now SIGNAL go';
 | 
						|
 | 
						|
  connection con2;
 | 
						|
  --error ER_XAER_NOTA
 | 
						|
  reap;
 | 
						|
  disconnect con2;
 | 
						|
 | 
						|
  connection default;
 | 
						|
  SET debug_sync='RESET';
 | 
						|
 | 
						|
  let $op= XA ROLLBACK 'xatest';
 | 
						|
  dec $i;
 | 
						|
}
 |