mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
MDEV-6083 - Assertion `! (&(&LOCK_open)->m_mutex)->count ||
! pthread_equal(pth read_self(), (&(&LOCK_open)->m_mutex)->thread)'
fails in intern_sys_var_ptr on server shutdown after uninstalling
TokuDB plugin at runtime
This assertion was introduced by patch for MDEV-5089 to ensure proper lock order
among LOCK_open and LOCK_global_system_variables: LOCK_open must not be held
while acquiring LOCK_global_system_variables.
intern_sys_var_ptr() may be called while freeing storage engine variables with
PLUGIN_VAR_MEMALLOC flag (when destroying table share after storage engine was
uninstalled). In this case LOCK_open is held, which is harmless because we need
global value pointer and thus won't acquire LOCK_global_system_variables.
Relaxed assertion so it is valid only for session variables.
This commit is contained in:
@@ -2900,11 +2900,12 @@ static uchar *intern_sys_var_ptr(THD* thd, int offset, bool global_lock)
|
||||
DBUG_ENTER("intern_sys_var_ptr");
|
||||
DBUG_ASSERT(offset >= 0);
|
||||
DBUG_ASSERT((uint)offset <= global_system_variables.dynamic_variables_head);
|
||||
mysql_mutex_assert_not_owner(&LOCK_open);
|
||||
|
||||
if (!thd)
|
||||
DBUG_RETURN((uchar*) global_system_variables.dynamic_variables_ptr + offset);
|
||||
|
||||
mysql_mutex_assert_not_owner(&LOCK_open);
|
||||
|
||||
/*
|
||||
dynamic_variables_head points to the largest valid offset
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user