Hi Sergei,
> > > Not exactly. In 10.2 THD::~THD() only has > > mysql_mutex_lock(&LOCK_thd_data); > mysql_mutex_unlock(&LOCK_thd_data); > > it's not what Jan did. So I thought it'd be safer to leave it in place. > But 10.5 has > > if (WSREP_NNULL(this)) mysql_mutex_lock(&LOCK_thd_data); > mysql_mutex_lock(&LOCK_thd_kill); > mysql_mutex_unlock(&LOCK_thd_kill); > if (WSREP_NNULL(this)) mysql_mutex_unlock(&LOCK_thd_data); > > which is *exactly* what Jan did, so yes, when merging this chunk should > go away (and it's quite likely that you'll be doing this merge, so > please don't forget). Because of Jan's change in THD::~THD() there will > be a merge conflict in the destructor, so it cannot slip unnoticed and > auto-merged. > I do not follow merging this chunk should go away here. 10.2 : https://github.com/MariaDB/server/commit/d112c363b51768b9e1d7bc7c600a4358a10dee9f 10.3 : https://github.com/MariaDB/server/commit/79b22723d87459f2bf6265b7fcc163ef63aa6e5f 10.6 : https://github.com/MariaDB/server/commit/cede9020fa7da400bb285780ae6d8a3e15abe3e4 Looking into KILL: 10.2: KILL find_thread_by_id acquires LOCK_THD_data and THD::set_killed aquires LOCK_thd_kill 10.3-10.6: KILL find_thread_by_id acquires LOCK_thd_data (wsrep) and LOCK_thd_data THD::set_killed acquires LOCK_thd_kill In all cases I do: void THD::free_connection() { DBUG_ASSERT(free_connection_done == 0); #ifdef WITH_WSREP /* wsrep_rgi should be protected with LOCK_thd_data mutex and mutexing ordering rules state that LOCK_thd_data must be taken before LOCK_thd_kill. */ if (wsrep_rgi) mysql_mutex_lock(&LOCK_thd_data); #endif /* Other threads may have a lock on LOCK_thd_kill to ensure that this THD is not deleted while they access it. The following mutex_lock ensures that no one else is using this THD and it's now safe to continue. */ mysql_mutex_lock(&LOCK_thd_kill); mysql_mutex_unlock(&LOCK_thd_kill); #ifdef WITH_WSREP if (rpl_group_info *rgi= wsrep_rgi) { assert(WSREP(this)); wsrep_rgi= 0; mysql_mutex_unlock(&LOCK_thd_data); delete rgi; } #endif Code looks like that because Marko requested not to do delete rgi under a mutex. So do you mean that I should take LOCK_thd_data even when we do not have wsrep_rgi for wsrep as if I correctly understand wsrep_rgi is there only for applier not all THDs with WSREP(thd). R: Jan
_______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp

