Skip to content

Commit

Permalink
BINLOG with LOCK TABLES and SAVEPOINT could cause a crash in debug bin
Browse files Browse the repository at this point in the history
MDEV-22048 Assertion `binlog_table_maps == 0 ||
           locked_tables_mode == LTM_LOCK_TABLES' failed in
           THD::reset_for_next_command
  • Loading branch information
montywi committed Jun 14, 2020
1 parent 6a3b581 commit 654b593
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
11 changes: 11 additions & 0 deletions mysql-test/suite/binlog/r/binlog_mixed.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 (a) VALUES (1),(2);
CREATE TABLE t2 (b INT) ENGINE=InnoDB;
CREATE TRIGGER tr1 BEFORE UPDATE ON t1 FOR EACH ROW SET @a = 0;
CREATE TRIGGER tr2 BEFORE INSERT ON t2 FOR EACH ROW DELETE FROM t1 LIMIT 1;
SET AUTOCOMMIT= OFF;
LOCK TABLES t2 WRITE;
DELETE FROM t1 LIMIT 1;
SAVEPOINT A;
UNLOCK TABLES;
DROP TABLE t1, t2;
23 changes: 23 additions & 0 deletions mysql-test/suite/binlog/t/binlog_mixed.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--source include/have_innodb.inc
--source include/have_binlog_format_mixed_or_row.inc

#
# MDEV-22048 Assertion `binlog_table_maps == 0 ||
# locked_tables_mode == LTM_LOCK_TABLES' failed in
# THD::reset_for_next_command
#

CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 (a) VALUES (1),(2);

CREATE TABLE t2 (b INT) ENGINE=InnoDB;

CREATE TRIGGER tr1 BEFORE UPDATE ON t1 FOR EACH ROW SET @a = 0;
CREATE TRIGGER tr2 BEFORE INSERT ON t2 FOR EACH ROW DELETE FROM t1 LIMIT 1;

SET AUTOCOMMIT= OFF;
LOCK TABLES t2 WRITE;
DELETE FROM t1 LIMIT 1;
SAVEPOINT A;
UNLOCK TABLES;
DROP TABLE t1, t2;
1 change: 1 addition & 0 deletions sql/sql_parse.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5045,6 +5045,7 @@ mysql_execute_command(THD *thd)
res= 1;
thd->mdl_context.release_transactional_locks();
thd->variables.option_bits&= ~(OPTION_TABLE_LOCK);
thd->reset_binlog_for_next_statement();
}
if (thd->global_read_lock.is_acquired() &&
thd->current_backup_stage == BACKUP_FINISHED)
Expand Down

0 comments on commit 654b593

Please sign in to comment.