summaryrefslogtreecommitdiff
path: root/sql/sql_parse.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2021-02-12 15:05:24 +0100
committerSergei Golubchik <serg@mariadb.org>2021-02-12 18:17:07 +0100
commit259b945204eec0dc623fd861c0f83fcb2b3bd763 (patch)
treea24035aa30661a659c6a3eb9e1506981a01ab3d1 /sql/sql_parse.cc
parenteac8341df4c3c7b98360f4e9498acf393dc055e3 (diff)
downloadmariadb-git-259b945204eec0dc623fd861c0f83fcb2b3bd763.tar.gz
remove find_thread_with_thd_data_lock_callback
let the caller take the lock if needed
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r--sql/sql_parse.cc27
1 files changed, 5 insertions, 22 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index d71d29bc85a..9d9831d9209 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -9098,24 +9098,6 @@ THD *find_thread_by_id(longlong id, bool query_id)
return arg.thd;
}
-static my_bool find_thread_with_thd_data_lock_callback(THD *thd, find_thread_callback_arg *arg)
-{
- if (arg->id == (arg->query_id ? thd->query_id : (longlong) thd->thread_id))
- {
- mysql_mutex_lock(&thd->LOCK_thd_kill); // Lock from delete
- mysql_mutex_lock(&thd->LOCK_thd_data); // XXX DELME
- arg->thd= thd;
- return 1;
- }
- return 0;
-}
-THD *find_thread_by_id_with_thd_data_lock(longlong id, bool query_id)
-{
- find_thread_callback_arg arg(id, query_id);
- server_threads.iterate(find_thread_with_thd_data_lock_callback, &arg);
- return arg.thd;
-}
-
/**
kill one thread.
@@ -9132,7 +9114,7 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ
uint error= (type == KILL_TYPE_QUERY ? ER_NO_SUCH_QUERY : ER_NO_SUCH_THREAD);
DBUG_ENTER("kill_one_thread");
DBUG_PRINT("enter", ("id: %lld signal: %u", id, (uint) kill_signal));
- tmp= find_thread_by_id_with_thd_data_lock(id, type == KILL_TYPE_QUERY);
+ tmp= find_thread_by_id(id, type == KILL_TYPE_QUERY);
if (!tmp)
DBUG_RETURN(error);
@@ -9159,6 +9141,7 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ
faster and do a harder kill than KILL_SYSTEM_THREAD;
*/
+ mysql_mutex_lock(&tmp->LOCK_thd_data); // for various wsrep* checks below
#ifdef WITH_WSREP
if (((thd->security_ctx->master_access & SUPER_ACL) ||
thd->security_ctx->user_matches(tmp->security_ctx)) &&
@@ -9180,8 +9163,8 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ
else
#endif /* WITH_WSREP */
{
- WSREP_DEBUG("kill_one_thread %llu, victim: %llu wsrep_aborter %llu by signal %d",
- thd->thread_id, id, tmp->wsrep_aborter, kill_signal);
+ WSREP_DEBUG("kill_one_thread %llu, victim: %llu wsrep_aborter %llu by signal %d",
+ thd->thread_id, id, tmp->wsrep_aborter, kill_signal);
tmp->awake_no_mutex(kill_signal);
WSREP_DEBUG("victim: %llu taken care of", id);
error= 0;
@@ -9190,9 +9173,9 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ
else
error= (type == KILL_TYPE_QUERY ? ER_KILL_QUERY_DENIED_ERROR :
ER_KILL_DENIED_ERROR);
+ mysql_mutex_unlock(&tmp->LOCK_thd_data);
}
mysql_mutex_unlock(&tmp->LOCK_thd_kill);
- mysql_mutex_unlock(&tmp->LOCK_thd_data);
DBUG_PRINT("exit", ("%d", error));
DBUG_RETURN(error);
}