summaryrefslogtreecommitdiff
path: root/sql/sql_plugin.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_plugin.cc')
-rw-r--r--sql/sql_plugin.cc47
1 files changed, 21 insertions, 26 deletions
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index 21767b4de96..82b4e85e6b3 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -2834,37 +2834,25 @@ static void update_func_double(THD *thd, struct st_mysql_sys_var *var,
System Variables support
****************************************************************************/
-sys_var *find_sys_var_ex(THD *thd, const char *str, size_t length,
- bool throw_error, bool locked)
+sys_var *find_sys_var(THD *thd, const char *str, size_t length,
+ bool throw_error)
{
sys_var *var;
- sys_var_pluginvar *pi= NULL;
- plugin_ref plugin;
- DBUG_ENTER("find_sys_var_ex");
+ sys_var_pluginvar *pi;
+ DBUG_ENTER("find_sys_var");
DBUG_PRINT("enter", ("var '%.*s'", (int)length, str));
- if (!locked)
- mysql_mutex_lock(&LOCK_plugin);
mysql_prlock_rdlock(&LOCK_system_variables_hash);
if ((var= intern_find_sys_var(str, length)) &&
(pi= var->cast_pluginvar()))
{
- mysql_prlock_unlock(&LOCK_system_variables_hash);
- LEX *lex= thd ? thd->lex : 0;
- if (!(plugin= intern_plugin_lock(lex, plugin_int_to_ref(pi->plugin))))
+ mysql_mutex_lock(&LOCK_plugin);
+ if (!intern_plugin_lock(thd ? thd->lex : 0, plugin_int_to_ref(pi->plugin),
+ PLUGIN_IS_READY))
var= NULL; /* failed to lock it, it must be uninstalling */
- else
- if (!(plugin_state(plugin) & PLUGIN_IS_READY))
- {
- /* initialization not completed */
- var= NULL;
- intern_plugin_unlock(lex, plugin);
- }
- }
- else
- mysql_prlock_unlock(&LOCK_system_variables_hash);
- if (!locked)
mysql_mutex_unlock(&LOCK_plugin);
+ }
+ mysql_prlock_unlock(&LOCK_system_variables_hash);
if (unlikely(!throw_error && !var))
my_error(ER_UNKNOWN_SYSTEM_VARIABLE, MYF(0),
@@ -2873,11 +2861,6 @@ sys_var *find_sys_var_ex(THD *thd, const char *str, size_t length,
}
-sys_var *find_sys_var(THD *thd, const char *str, size_t length)
-{
- return find_sys_var_ex(thd, str, length, false, false);
-}
-
/*
called by register_var, construct_options and test_plugin_options.
Returns the 'bookmark' for the named variable.
@@ -3161,6 +3144,11 @@ void plugin_thdvar_init(THD *thd)
thd->variables.enforced_table_plugin= NULL;
cleanup_variables(&thd->variables);
+ /* This and all other variable cleanups are here for COM_CHANGE_USER :( */
+#ifndef EMBEDDED_LIBRARY
+ thd->session_tracker.sysvars.deinit(thd);
+#endif
+
thd->variables= global_system_variables;
/* we are going to allocate these lazily */
@@ -3182,6 +3170,9 @@ void plugin_thdvar_init(THD *thd)
intern_plugin_unlock(NULL, old_enforced_table_plugin);
mysql_mutex_unlock(&LOCK_plugin);
+#ifndef EMBEDDED_LIBRARY
+ thd->session_tracker.sysvars.init(thd);
+#endif
DBUG_VOID_RETURN;
}
@@ -3247,6 +3238,10 @@ void plugin_thdvar_cleanup(THD *thd)
plugin_ref *list;
DBUG_ENTER("plugin_thdvar_cleanup");
+#ifndef EMBEDDED_LIBRARY
+ thd->session_tracker.sysvars.deinit(thd);
+#endif
+
mysql_mutex_lock(&LOCK_plugin);
unlock_variables(thd, &thd->variables);