diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-03-28 12:27:06 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-03-28 12:39:50 +0200 |
commit | d0116e10a5da52503a89a413e481996ce3f65e63 (patch) | |
tree | e67bbdfa81ee11b205610c3b038e864f3206a0a6 /sql/sql_parse.cc | |
parent | 81d71ee6b21870772c336bff15b71904914f146a (diff) | |
download | mariadb-git-d0116e10a5da52503a89a413e481996ce3f65e63.tar.gz |
Revert MDEV-18464 and MDEV-12009
This reverts commit 21b2fada7ab7f35c898c02d2f918461409cc9c8e
and commit 81d71ee6b21870772c336bff15b71904914f146a.
The MDEV-18464 change introduces a few data race issues. Contrary to
the documentation, the field trx_t::victim is not always being protected
by lock_sys_t::mutex and trx_t::mutex. Most importantly, it seems
that KILL QUERY could wrongly avoid acquiring both mutexes when
invoking lock_trx_handle_wait_low(), in case another thread had
already set trx->victim=true.
We also revert MDEV-12009, because it should depend on the MDEV-18464
fix being present.
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r-- | sql/sql_parse.cc | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 920f7ac0329..1f060305d4f 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -8292,19 +8292,11 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ It's ok to also kill DELAYED threads with KILL_CONNECTION instead of KILL_SYSTEM_THREAD; The difference is that KILL_CONNECTION may be faster and do a harder kill than KILL_SYSTEM_THREAD; - - Note that if thread is wsrep Brute Force or applier thread we - allow killing it only when we're SUPER. */ - if ((thd->security_ctx->master_access & SUPER_ACL) || - (thd->security_ctx->user_matches(tmp->security_ctx) -#ifdef WITH_WSREP - && - !tmp->wsrep_applier && - !wsrep_thd_is_BF(tmp, false) -#endif - )) + if (((thd->security_ctx->master_access & SUPER_ACL) || + thd->security_ctx->user_matches(tmp->security_ctx)) && + !wsrep_thd_is_BF(tmp, false)) { tmp->awake(kill_signal); error=0; |