1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

Forbid SLAVE STOP if the thread executing the query has locked

tables.  This removes a possible deadlock situation.
This commit is contained in:
monty@mashka.mysql.fi
2002-12-13 16:01:51 +02:00
parent 53ac261312
commit 3e655c8d1b

View File

@@ -1376,6 +1376,24 @@ mysql_execute_command(void)
start_slave(thd);
break;
case SQLCOM_SLAVE_STOP:
/*
if the client thread has locked tables, a deadlock is possible.
Assume that
- the client thread does LOCK TABLE t READ.
- then the master updates t.
- then the SQL slave thread wants to update t,
so it waits for the client thread because t is locked by it.
- then the client thread does SLAVE STOP.
SLAVE STOP waits for the SQL slave thread to terminate its
update t, which waits for the client thread because t is locked by it.
To prevent that, refuse SLAVE STOP if the
client thread has locked tables
*/
if (thd->locked_tables || thd->active_transaction())
{
send_error(&thd->net,ER_LOCK_OR_ACTIVE_TRANSACTION);
break;
}
stop_slave(thd);
break;