diff options
author | Monty <monty@mariadb.org> | 2020-07-21 15:12:53 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2020-07-21 15:12:53 +0300 |
commit | e26c822aa0a73e62d7a3e4a0915c7bf6cd734978 (patch) | |
tree | 51a4b3e5bd544d1a8a05c2da737b7adf4591d734 | |
parent | af83ed9f0ed10496c11bea6b054f4d86562e2349 (diff) | |
download | mariadb-git-e26c822aa0a73e62d7a3e4a0915c7bf6cd734978.tar.gz |
MDEV-16929 Assertion ... in close_thread_tables upon killing connection
Problem was that the code didn't handle a transaction created in innodb
as part of a failed mysql_lock_tables()
-rw-r--r-- | mysql-test/suite/sql_sequence/kill.result | 12 | ||||
-rw-r--r-- | mysql-test/suite/sql_sequence/kill.test | 20 | ||||
-rw-r--r-- | sql/sql_sequence.cc | 4 |
3 files changed, 36 insertions, 0 deletions
diff --git a/mysql-test/suite/sql_sequence/kill.result b/mysql-test/suite/sql_sequence/kill.result new file mode 100644 index 00000000000..6d966254de3 --- /dev/null +++ b/mysql-test/suite/sql_sequence/kill.result @@ -0,0 +1,12 @@ +# +# MDEV-16929 Assertion ... in close_thread_tables upon killing connection +# running SHOW on sequence +# +CREATE SEQUENCE s ENGINE=InnoDB; +RENAME TABLE s TO s1; +connect con1,localhost,root,,test; +SHOW CREATE SEQUENCE s1; +connection default; +KILL thread_id; +connection default; +drop sequence s1; diff --git a/mysql-test/suite/sql_sequence/kill.test b/mysql-test/suite/sql_sequence/kill.test new file mode 100644 index 00000000000..9caebc57f12 --- /dev/null +++ b/mysql-test/suite/sql_sequence/kill.test @@ -0,0 +1,20 @@ +--source include/have_innodb.inc + +--echo # +--echo # MDEV-16929 Assertion ... in close_thread_tables upon killing connection +--echo # running SHOW on sequence +--echo # + +CREATE SEQUENCE s ENGINE=InnoDB; +RENAME TABLE s TO s1; +--connect (con1,localhost,root,,test) +--let $conid= `SELECT CONNECTION_ID()` +--send + SHOW CREATE SEQUENCE s1; +--connection default +--replace_result $conid thread_id +--eval KILL $conid + +# Cleanup +--connection default +drop sequence s1; diff --git a/sql/sql_sequence.cc b/sql/sql_sequence.cc index 939963de682..ffdb4b54c16 100644 --- a/sql/sql_sequence.cc +++ b/sql/sql_sequence.cc @@ -485,6 +485,10 @@ int SEQUENCE::read_initial_values(TABLE *table) if (mdl_lock_used) thd->mdl_context.release_lock(mdl_request.ticket); write_unlock(table); + + if (!has_active_transaction && !thd->transaction.stmt.is_empty() && + !thd->in_sub_stmt) + trans_commit_stmt(thd); DBUG_RETURN(HA_ERR_LOCK_WAIT_TIMEOUT); } DBUG_ASSERT(table->reginfo.lock_type == TL_READ); |