[Commits] 056bab0: MDEV-12620 - set lock_wait_timeout = 1; flush tables with read lock;

Sergey Vojtovich svoj at mariadb.org
Fri Jun 16 14:53:57 EEST 2017


revision-id: 056bab0880544d91ea67d18fe8db65b4f6625482 (mariadb-10.1.24-22-g056bab0)
parent(s): 58f87a41bd8de7370cc05c41977fadc685826c9e
committer: Sergey Vojtovich
timestamp: 2017-06-16 15:47:46 +0400
message:

MDEV-12620 - set lock_wait_timeout = 1;flush tables with read lock;
             lock not released after timeout

Release GRL if FLUSH TABLES phase failed.

---
 mysql-test/r/mdl_sync.result | 15 +++++++++++++++
 mysql-test/t/mdl_sync.test   | 24 ++++++++++++++++++++++++
 sql/sql_reload.cc            |  3 ++-
 3 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/mysql-test/r/mdl_sync.result b/mysql-test/r/mdl_sync.result
index 206ad50..8b6f960 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 8e80978..c479c2a 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 376dfeb..d68ce96 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


More information about the commits mailing list