From: Jon Olav Hauglid Date: May 12 2011 3:02pm Subject: bzr commit into mysql-trunk-mtr branch (jon.hauglid:3078) List-Archive: http://lists.mysql.com/commits/137246 Message-Id: <201105121503.p4CF39fn019284@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///export/home/x/mysql-trunk-test/ based on revid:bjorn.munch@stripped 3078 Jon Olav Hauglid 2011-05-12 [merge] Merge from mysql-5.5 to mysql-trunk Text conflict in sql/log.cc modified: mysql-test/suite/binlog/r/binlog_innodb_row.result mysql-test/suite/binlog/t/binlog_innodb_row.test sql/binlog.cc === modified file 'mysql-test/suite/binlog/r/binlog_innodb_row.result' --- a/mysql-test/suite/binlog/r/binlog_innodb_row.result 2010-08-20 02:59:58 +0000 +++ b/mysql-test/suite/binlog/r/binlog_innodb_row.result 2011-05-12 12:56:00 +0000 @@ -59,3 +59,20 @@ show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t1` /* generated by server */ ############################################### +# +# Bug#12346411 SQL/LOG.CC:6509: ASSERTION `PREPARED_XIDS > 0' FAILED +# +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1(a INT PRIMARY KEY) engine=innodb; +CREATE TABLE t2(a INT) engine=myisam; +INSERT INTO t1 VALUES (1); +START TRANSACTION; +INSERT INTO t2 VALUES (1); +INSERT IGNORE INTO t1 VALUES (1); +COMMIT; +INSERT INTO t1 VALUES (2); +START TRANSACTION; +INSERT INTO t2 VALUES (2); +UPDATE IGNORE t1 SET a=1 WHERE a=2; +COMMIT; +DROP TABLE t1, t2; === modified file 'mysql-test/suite/binlog/t/binlog_innodb_row.test' --- a/mysql-test/suite/binlog/t/binlog_innodb_row.test 2010-03-09 23:41:21 +0000 +++ b/mysql-test/suite/binlog/t/binlog_innodb_row.test 2011-05-12 12:56:00 +0000 @@ -77,3 +77,29 @@ DROP TEMPORARY TABLE t1; -- echo ############################################### -- source include/show_binlog_events.inc -- echo ############################################### + + +--echo # +--echo # Bug#12346411 SQL/LOG.CC:6509: ASSERTION `PREPARED_XIDS > 0' FAILED +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +CREATE TABLE t1(a INT PRIMARY KEY) engine=innodb; +CREATE TABLE t2(a INT) engine=myisam; + +INSERT INTO t1 VALUES (1); +START TRANSACTION; +INSERT INTO t2 VALUES (1); +INSERT IGNORE INTO t1 VALUES (1); +COMMIT; + +INSERT INTO t1 VALUES (2); +START TRANSACTION; +INSERT INTO t2 VALUES (2); +UPDATE IGNORE t1 SET a=1 WHERE a=2; +COMMIT; + +DROP TABLE t1, t2; === modified file 'sql/binlog.cc' --- a/sql/binlog.cc 2011-04-04 08:47:25 +0000 +++ b/sql/binlog.cc 2011-05-12 15:02:29 +0000 @@ -4573,8 +4573,11 @@ int MYSQL_BIN_LOG::unlog(ulong cookie, m { DBUG_ENTER("MYSQL_BIN_LOG::unlog"); mysql_mutex_lock(&LOCK_prep_xids); - DBUG_ASSERT(prepared_xids > 0); - if (--prepared_xids == 0) { + // prepared_xids can be 0 if the transaction had ignorable errors. + DBUG_ASSERT(prepared_xids >= 0); + if (prepared_xids > 0) + prepared_xids--; + if (prepared_xids == 0) { DBUG_PRINT("info", ("prepared_xids=%lu", prepared_xids)); mysql_cond_signal(&COND_prep_xids); } No bundle (reason: revision is a merge (you can force generation of a bundle with env var BZR_FORCE_BUNDLE=1)).