Commit ae293f9a authored by serg@serg.mylan's avatar serg@serg.mylan

Bug #10942 "deadlock with FLUSH TABLES WITH READ LOCK + STOP SLAVE"

don't allow STOP SLAVE if global read lock is in taken
parent aa74affb
...@@ -38,3 +38,9 @@ master-bin.000001 461 Query 1 461 use `test`; rename table t1 to t5, t2 to t1 ...@@ -38,3 +38,9 @@ master-bin.000001 461 Query 1 461 use `test`; rename table t1 to t5, t2 to t1
master-bin.000001 527 Query 1 527 use `test`; flush tables master-bin.000001 527 Query 1 527 use `test`; flush tables
select * from t3; select * from t3;
a a
stop slave;
drop table t1;
flush tables with read lock;
start slave;
stop slave;
ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
...@@ -37,4 +37,14 @@ select * from t3; ...@@ -37,4 +37,14 @@ select * from t3;
# Note that all this confusion may cause warnings 'table xx is open on rename' # Note that all this confusion may cause warnings 'table xx is open on rename'
# in the .err files; these are not fatal and are not reported by mysql-test-run. # in the .err files; these are not fatal and are not reported by mysql-test-run.
stop slave;
connection master;
drop table t1;
connection slave;
flush tables with read lock;
start slave;
sleep 1;
--error 1192
stop slave;
# End of 4.1 tests # End of 4.1 tests
...@@ -2601,7 +2601,7 @@ mysql_execute_command(THD *thd) ...@@ -2601,7 +2601,7 @@ mysql_execute_command(THD *thd)
To prevent that, refuse SLAVE STOP if the To prevent that, refuse SLAVE STOP if the
client thread has locked tables client thread has locked tables
*/ */
if (thd->locked_tables || thd->active_transaction()) if (thd->locked_tables || thd->active_transaction() || thd->global_read_lock)
{ {
send_error(thd,ER_LOCK_OR_ACTIVE_TRANSACTION); send_error(thd,ER_LOCK_OR_ACTIVE_TRANSACTION);
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment