From b75d8ac0f320cfc137e61fa1d0a7f8a12fed33ba Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Mon, 21 Feb 2005 11:51:50 +0100 Subject: [PATCH] xa assert fixes --- sql/handler.cc | 6 +++++- sql/handler.h | 2 +- sql/log.cc | 7 ++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/sql/handler.cc b/sql/handler.cc index 3ccea502a50..0867908f2e8 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -476,6 +476,9 @@ void ha_close_connection(THD* thd) void trans_register_ha(THD *thd, bool all, handlerton *ht_arg) { THD_TRANS *trans; + DBUG_ENTER("trans_register_ha"); + DBUG_PRINT("enter",("%s", all ? "all" : "stmt")); + if (all) { trans= &thd->transaction.all; @@ -496,6 +499,7 @@ void trans_register_ha(THD *thd, bool all, handlerton *ht_arg) trans->no_2pc|=(ht_arg->prepare==0); if (thd->transaction.xid.is_null()) thd->transaction.xid.set(thd->query_id); + DBUG_VOID_RETURN; } /* @@ -514,7 +518,7 @@ int ha_prepare(THD *thd) if (trans->nht) { if (trans->no_2pc) - return -1; + DBUG_RETURN(-1); for (; *ht; ht++) { int err; diff --git a/sql/handler.h b/sql/handler.h index 5968b9a5e1d..75a3d249b9c 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -97,7 +97,7 @@ Note: the following includes binlog and closing 0. so: innodb+bdb+ndb+binlog+0 */ -#define MAX_HA 5 +#define MAX_HA 6 /* Bits in index_ddl_flags(KEY *wanted_index) diff --git a/sql/log.cc b/sql/log.cc index b048323aa76..64c2a890969 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -129,11 +129,12 @@ static int binlog_rollback(THD *thd, bool all) IO_CACHE *trans_log= (IO_CACHE*)thd->ha_data[binlog_hton.slot]; DBUG_ENTER("binlog_rollback"); /* - first two conditions here are guaranteed - see trans_register_ha() - call below. The third one must be true. If it is not, we're registering + First assert is guaranteed - see trans_register_ha() call below. + The second must be true. If it is not, we're registering unnecessary, doing extra work. The cause should be found and eliminated */ - DBUG_ASSERT(all && mysql_bin_log.is_open() && my_b_tell(trans_log)); + DBUG_ASSERT(all || !(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))); + DBUG_ASSERT(mysql_bin_log.is_open() && my_b_tell(trans_log)); /* Update the binary log with a BEGIN/ROLLBACK block if we have cached some queries and we updated some non-transactional