From 8478e707d94bc9c8dd25024d6ca3ec4731fbbe66 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Wed, 10 Mar 2010 15:04:32 +0400 Subject: BUG#51342 - more xid crashing SET autocommit=1 while XA transaction is active may cause various side effects, including memory corruption and server crash. The problem is that SET autocommit=1 and further queries attempt to commit local transaction, whereas XA transaction is still active. As local and XA transactions are mutually exclusive, this patch forbids enabling autocommit mode while XA transaction is active. --- sql/set_var.cc | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'sql/set_var.cc') diff --git a/sql/set_var.cc b/sql/set_var.cc index 4871afd2c56..8e032d44a62 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -3065,6 +3065,13 @@ static bool set_option_autocommit(THD *thd, set_var *var) if ((org_options & OPTION_NOT_AUTOCOMMIT)) { /* We changed to auto_commit mode */ + if (thd->transaction.xid_state.xa_state != XA_NOTR) + { + thd->options= org_options; + my_error(ER_XAER_RMFAIL, MYF(0), + xa_state_names[thd->transaction.xid_state.xa_state]); + return 1; + } thd->options&= ~OPTION_BEGIN; thd->transaction.all.modified_non_trans_table= FALSE; thd->server_status|= SERVER_STATUS_AUTOCOMMIT; -- cgit v1.2.1