summaryrefslogtreecommitdiff
path: root/mysql-test/r/xa.result
diff options
context:
space:
mode:
authorDavi Arnaut <Davi.Arnaut@Sun.COM>2009-06-05 19:16:54 -0300
committerDavi Arnaut <Davi.Arnaut@Sun.COM>2009-06-05 19:16:54 -0300
commit12f91b1d8c45bb84ee5bc7ee4b0b455fbb0e2a90 (patch)
treea296754126b086c60a003f8b88c4800d1e9fcf07 /mysql-test/r/xa.result
parent46a4685cdb29ea885ddbec6d500b6c64180706e9 (diff)
downloadmariadb-git-12f91b1d8c45bb84ee5bc7ee4b0b455fbb0e2a90.tar.gz
Bug#44672: Assertion failed: thd->transaction.xid_state.xid.is_null()
The problem is that when a optimization of read-only transactions (bypass 2-phase commit) was implemented, it removed the code that reseted the XID once a transaction wasn't active anymore: sql/sql_parse.cc: - bzero(&thd->transaction.stmt, sizeof(thd->transaction.stmt)); - if (!thd->active_transaction()) - thd->transaction.xid_state.xid.null(); + thd->transaction.stmt.reset(); This mostly worked fine as the transaction commit and rollback functions (in handler.cc) reset the XID once the transaction is ended. But those functions wouldn't reset the XID in case of a empty transaction, leading to a assertion when a new starting a new XA transaction. The solution is to ensure that the XID state is reset when empty transactions are ended (by either commit or rollback). This is achieved by reorganizing the code so that the transaction cleanup routine is invoked whenever a transaction is ended. mysql-test/r/xa.result: Add test case result for Bug#44672 mysql-test/t/xa.test: Add test case for Bug#44672 sql/handler.cc: Invoke transaction cleanup function whenever a transaction is ended. Move XID state reset logic to the transaction cleanup function. sql/sql_class.h: Add XID state reset logic.
Diffstat (limited to 'mysql-test/r/xa.result')
-rw-r--r--mysql-test/r/xa.result6
1 files changed, 6 insertions, 0 deletions
diff --git a/mysql-test/r/xa.result b/mysql-test/r/xa.result
index 592cf07522b..92f52b402ec 100644
--- a/mysql-test/r/xa.result
+++ b/mysql-test/r/xa.result
@@ -75,3 +75,9 @@ xa rollback 'a','c';
xa start 'a','c';
drop table t1;
End of 5.0 tests
+xa start 'a';
+xa end 'a';
+xa rollback 'a';
+xa start 'a';
+xa end 'a';
+xa rollback 'a';