From a1bc3936304ae9fca8cbe5ebeb51c8f626fbd87b Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Wed, 15 Aug 2012 14:37:55 +0300 Subject: [PATCH] Fixed MDEV-366: Assertion `share->reopen == 1' failed in maria_extra on DROP TABLE which is locked twice mysql-test/suite/maria/lock.result: Added test case mysql-test/suite/maria/lock.test: Added test case sql/sql_table.cc: One can't call HA_EXTRA_FORCE_REOPEN on something that may be opened twice. It's safe to remove the call in this case as we will call HA_EXTRA_PREPARE_FOR_DROP for the table anyway. (One nice side effect is that drop is a bit faster as we are not flushing the cache to disk before the drop anymore) --- mysql-test/suite/maria/lock.result | 3 +++ mysql-test/suite/maria/lock.test | 8 ++++++++ sql/sql_table.cc | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/maria/lock.result b/mysql-test/suite/maria/lock.result index 101347c7d4c..b67d1ab7b0d 100644 --- a/mysql-test/suite/maria/lock.result +++ b/mysql-test/suite/maria/lock.result @@ -27,3 +27,6 @@ i drop table t2; unlock tables; drop table t1; +CREATE TABLE t1 (i INT) ENGINE=Aria; +LOCK TABLES t1 WRITE, t1 AS t1a WRITE; +DROP TABLE t1; diff --git a/mysql-test/suite/maria/lock.test b/mysql-test/suite/maria/lock.test index 6116f0b5f08..5b6d17069e7 100644 --- a/mysql-test/suite/maria/lock.test +++ b/mysql-test/suite/maria/lock.test @@ -42,3 +42,11 @@ select * from t1; drop table t2; unlock tables; drop table t1; + +# +# MDEV-366: lock table twice with LOCK TABLES and then drop it +# + +CREATE TABLE t1 (i INT) ENGINE=Aria; +LOCK TABLES t1 WRITE, t1 AS t1a WRITE; +DROP TABLE t1; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 0a858b2c345..db5435b9b27 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2187,7 +2187,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, if (thd->locked_tables_mode) { - if (wait_while_table_is_used(thd, table->table, HA_EXTRA_FORCE_REOPEN)) + if (wait_while_table_is_used(thd, table->table, HA_EXTRA_NOT_USED)) { error= -1; goto err;