diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2021-08-03 07:00:34 +0300 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2021-08-16 15:48:53 +0300 |
commit | 2736e9054e9d9ddddba931f57966e44a0cedd0c7 (patch) | |
tree | e08d41f3a4736632ab111b762c945ab3a027fd8d /sql/sql_class.h | |
parent | 4cd063b9e40cfb77413bcd44bc7d922c6228f810 (diff) | |
download | mariadb-git-10.2-MDEV-25114.tar.gz |
MDEV-24114 : Crash: WSREP: invalid state ROLLED_BACK (FATAL)10.2-MDEV-25114
Reverts fix for MDEV-23328 i.e. commit 29bbcac0ee841
In this fix we try to modify normal SQL KILL in a following way:
trx_id= thd_to_trx(victim_thd)->id;
mutex_unlock(victim_thd->LOCK_thd_data);
mutex_unlock(victim_thd->LOCK_thd_kill);
lock_mutex_enter
trx=find_and_lock_trx_by_id(trx_id)
mytex_lock(trx->mysql_thd->LOCK_thd_kill);
mutex_lock(trx->mysql_thd->LOCK_thd_data)
For THD::awake() we use:
mutex_lock(thd->LOCK_thd_kill);
mutex_lock(thd->LOCK_thd_data);
thd->awake();
mutex_unlock(thd->LOCK_thd_data);
mutex_unlock(thd->LOCK_thd_kill);
For THD::set_killed in most cases we use
mutex_lock(thd->LOCK_thd_kill);
mutex_lock(thd->LOCK_thd_data);
thd->set_killed_no_mutex(...);
mutex_unlock(thd->LOCK_thd_data);
mutex_unlock(thd->LOCK_thd_kill);
Diffstat (limited to 'sql/sql_class.h')
-rw-r--r-- | sql/sql_class.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sql/sql_class.h b/sql/sql_class.h index 50ab3c56ca9..9defbc4da03 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1,6 +1,6 @@ /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. - Copyright (c) 2009, 2017, MariaDB Corporation. + Copyright (c) 2009, 2021, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -3727,7 +3727,7 @@ public: mysql_mutex_unlock(&LOCK_thd_kill); } /* - This is only used by THD::awake where we need to keep the lock mutex + This is only used where we need to keep the lock mutex locked over some time. It's ok to have this inline, as in most cases killed_errno_arg will be a constant 0 and most of the function will disappear. |