List:Commits« Previous MessageNext Message »
From:Jon Olav Hauglid Date:September 13 2010 9:23am
Subject:bzr commit into mysql-5.5-runtime branch (jon.hauglid:3136) Bug#56448
View as plain text  
#At file:///export/home/x/mysql-5.5-runtime-bug56448/ based on revid:jon.hauglid@stripped

 3136 Jon Olav Hauglid	2010-09-13
      Bug #56448 Assertion failed: ! is_set() with second xa end
      
      The problem was that issuing XA END when the XA transaction was
      already ended, caused an assertion. This assertion tests that 
      the server does not try to send OK to the client if there has
      already been an error reported. The bug was only noticeable on
      debug versions of the server.
      
      The reason for the problem was that the trans_xa_end() function
      reported success if the transaction was at XA_IDLE state at the
      end regardless of any errors occured during processing of
      trans_xa_end(). So if the transaction state was XA_IDLE already,
      reported errors would be ignored.
      
      This patch fixes the problem by having trans_xa_end() take into
      consideration any reported errors.
      
      Test case added to xa.test.

    modified:
      mysql-test/r/xa.result
      mysql-test/t/xa.test
      sql/transaction.cc
=== modified file 'mysql-test/r/xa.result'
--- a/mysql-test/r/xa.result	2010-03-10 15:31:22 +0000
+++ b/mysql-test/r/xa.result	2010-09-13 09:23:00 +0000
@@ -131,3 +131,10 @@ XA START 'xid1';
 XA END 'xid1';
 XA ROLLBACK 'xid1';
 DROP TABLE t1;
+#
+# Bug#56448 Assertion failed: ! is_set() with second xa end
+#
+XA START 'x';
+XA END 'x';
+XA END 'x';
+ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the  IDLE state

=== modified file 'mysql-test/t/xa.test'
--- a/mysql-test/t/xa.test	2010-03-24 15:03:44 +0000
+++ b/mysql-test/t/xa.test	2010-09-13 09:23:00 +0000
@@ -228,6 +228,18 @@ XA ROLLBACK 'xid1';
 disconnect con1;
 DROP TABLE t1;
 
+
+--echo #
+--echo # Bug#56448 Assertion failed: ! is_set() with second xa end
+--echo #
+
+XA START 'x';
+XA END 'x';
+# Second XA END caused an assertion.
+--error ER_XAER_RMFAIL
+XA END 'x';
+
+
 # Wait till all disconnects are completed
 --source include/wait_until_count_sessions.inc
 

=== modified file 'sql/transaction.cc'
--- a/sql/transaction.cc	2010-07-27 10:25:53 +0000
+++ b/sql/transaction.cc	2010-09-13 09:23:00 +0000
@@ -565,7 +565,8 @@ bool trans_xa_end(THD *thd)
   else if (!xa_trans_rolled_back(&thd->transaction.xid_state))
     thd->transaction.xid_state.xa_state= XA_IDLE;
 
-  DBUG_RETURN(thd->transaction.xid_state.xa_state != XA_IDLE);
+  DBUG_RETURN(thd->is_error() ||
+              thd->transaction.xid_state.xa_state != XA_IDLE);
 }
 
 


Attachment: [text/bzr-bundle] bzr/jon.hauglid@oracle.com-20100913092300-hv4q001sy4e0j1v6.bundle
Thread
bzr commit into mysql-5.5-runtime branch (jon.hauglid:3136) Bug#56448Jon Olav Hauglid13 Sep