diff options
author | Sergey Vojtovich <svoj@mariadb.org> | 2017-06-16 15:47:46 +0400 |
---|---|---|
committer | Sergey Vojtovich <svoj@mariadb.org> | 2017-06-16 15:47:46 +0400 |
commit | 056bab0880544d91ea67d18fe8db65b4f6625482 (patch) | |
tree | 18d728d74bc13c5bc52c4b7543e346b0b22753b8 | |
parent | 58f87a41bd8de7370cc05c41977fadc685826c9e (diff) | |
download | mariadb-git-056bab0880544d91ea67d18fe8db65b4f6625482.tar.gz |
MDEV-12620 - set lock_wait_timeout = 1;flush tables with read lock;
lock not released after timeout
Release GRL if FLUSH TABLES phase failed.
-rw-r--r-- | mysql-test/r/mdl_sync.result | 15 | ||||
-rw-r--r-- | mysql-test/t/mdl_sync.test | 24 | ||||
-rw-r--r-- | sql/sql_reload.cc | 3 |
3 files changed, 41 insertions, 1 deletions
diff --git a/mysql-test/r/mdl_sync.result b/mysql-test/r/mdl_sync.result index 206ad509e37..8b6f96033c9 100644 --- a/mysql-test/r/mdl_sync.result +++ b/mysql-test/r/mdl_sync.result @@ -3100,3 +3100,18 @@ a # Connection default DROP TABLE m1, t1, t2; SET DEBUG_SYNC= 'RESET'; +# +# MDEV-12620 - set lock_wait_timeout = 1;flush tables with read lock; +# lock not released after timeout +# +CREATE TABLE t1(a INT) ENGINE=InnoDB; +SET debug_sync='open_tables_after_open_and_process_table SIGNAL ready WAIT_FOR go'; +SELECT * FROM t1; +SET debug_sync='now WAIT_FOR ready'; +SET lock_wait_timeout=1; +FLUSH TABLES WITH READ LOCK; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET debug_sync='now SIGNAL go'; +a +SET debug_sync='RESET'; +DROP TABLE t1; diff --git a/mysql-test/t/mdl_sync.test b/mysql-test/t/mdl_sync.test index 8e809788a08..c479c2a4854 100644 --- a/mysql-test/t/mdl_sync.test +++ b/mysql-test/t/mdl_sync.test @@ -4806,6 +4806,30 @@ disconnect con2; disconnect con3; +--echo # +--echo # MDEV-12620 - set lock_wait_timeout = 1;flush tables with read lock; +--echo # lock not released after timeout +--echo # +CREATE TABLE t1(a INT) ENGINE=InnoDB; +SET debug_sync='open_tables_after_open_and_process_table SIGNAL ready WAIT_FOR go'; +send SELECT * FROM t1; + +connect (con1,localhost,root,,); +SET debug_sync='now WAIT_FOR ready'; +# lock_wait_timeout should be 0 in 10.3, so that we don't have to wait at all +SET lock_wait_timeout=1; +--error ER_LOCK_WAIT_TIMEOUT +FLUSH TABLES WITH READ LOCK; +SET debug_sync='now SIGNAL go'; + +connection default; +reap; +SET debug_sync='RESET'; +DROP TABLE t1; + +disconnect con1; + + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc diff --git a/sql/sql_reload.cc b/sql/sql_reload.cc index 376dfeb1542..d68ce96dc85 100644 --- a/sql/sql_reload.cc +++ b/sql/sql_reload.cc @@ -253,7 +253,8 @@ bool reload_acl_and_cache(THD *thd, unsigned long long options, NOTE: my_error() has been already called by reopen_tables() within close_cached_tables(). */ - result= 1; + thd->global_read_lock.unlock_global_read_lock(thd); + return 1; } if (thd->global_read_lock.make_global_read_lock_block_commit(thd)) // Killed |