diff options
author | Sergei Golubchik <serg@mariadb.org> | 2018-07-16 15:12:38 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-07-19 11:35:39 +0200 |
commit | d57ddaa1904d3c2f08460c539c72652f0c78c09a (patch) | |
tree | 72b53c0f274266155092317fad413fe667dde58f | |
parent | 5c744bb5350acbf2d3abce28d01fc829c4f2375c (diff) | |
download | mariadb-git-d57ddaa1904d3c2f08460c539c72652f0c78c09a.tar.gz |
MDEV-15551 Server hangs or assertion `strcmp(share->unique_file_name,filename) || share->last_version' fails in test_if_reopen or unexpected ER_LOCK_DEADLOCK
only use HA_EXTRA_PREPARE_FOR_DROP when the table is going to be dropped
-rw-r--r-- | mysql-test/suite/parts/r/truncate_locked.result | 7 | ||||
-rw-r--r-- | mysql-test/suite/parts/t/truncate_locked.test | 10 | ||||
-rw-r--r-- | sql/sql_truncate.cc | 3 |
3 files changed, 19 insertions, 1 deletions
diff --git a/mysql-test/suite/parts/r/truncate_locked.result b/mysql-test/suite/parts/r/truncate_locked.result new file mode 100644 index 00000000000..54a3722938e --- /dev/null +++ b/mysql-test/suite/parts/r/truncate_locked.result @@ -0,0 +1,7 @@ +create table t1 (i int) engine=myisam partition by hash(i) partitions 2 ; +lock table t1 write; +truncate table t1; +desc t1; +Field Type Null Key Default Extra +i int(11) YES NULL +drop table t1; diff --git a/mysql-test/suite/parts/t/truncate_locked.test b/mysql-test/suite/parts/t/truncate_locked.test new file mode 100644 index 00000000000..4ff1016fb05 --- /dev/null +++ b/mysql-test/suite/parts/t/truncate_locked.test @@ -0,0 +1,10 @@ +# +# MDEV-15551 Server hangs or assertion `strcmp(share->unique_file_name,filename) || share->last_version' fails in test_if_reopen or unexpected ER_LOCK_DEADLOCK +# +--source include/have_partition.inc +create table t1 (i int) engine=myisam partition by hash(i) partitions 2 ; +lock table t1 write; +truncate table t1; +desc t1; +drop table t1; + diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index 75a0678928b..f5161c09b2c 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -400,7 +400,8 @@ bool Sql_cmd_truncate_table::lock_table(THD *thd, TABLE_LIST *table_ref, { DEBUG_SYNC(thd, "upgrade_lock_for_truncate"); /* To remove the table from the cache we need an exclusive lock. */ - if (wait_while_table_is_used(thd, table, HA_EXTRA_PREPARE_FOR_DROP)) + if (wait_while_table_is_used(thd, table, + *hton_can_recreate ? HA_EXTRA_PREPARE_FOR_DROP : HA_EXTRA_NOT_USED)) DBUG_RETURN(TRUE); m_ticket_downgrade= table->mdl_ticket; /* Close if table is going to be recreated. */ |