mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
10.0-base merge
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2005, 2012, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2011, Monty Program Ab
|
||||
Copyright (c) 2010, 2013, Monty Program Ab
|
||||
|
||||
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
|
||||
@ -1116,7 +1116,7 @@ static bool plugin_add(MEM_ROOT *tmp_root,
|
||||
plugin_array_version++;
|
||||
if (my_hash_insert(&plugin_hash[plugin->type], (uchar*)tmp_plugin_ptr))
|
||||
tmp_plugin_ptr->state= PLUGIN_IS_FREED;
|
||||
init_alloc_root(&tmp_plugin_ptr->mem_root, 4096, 4096);
|
||||
init_alloc_root(&tmp_plugin_ptr->mem_root, 4096, 4096, MYF(0));
|
||||
|
||||
if (name->str)
|
||||
DBUG_RETURN(FALSE); // all done
|
||||
@ -1511,8 +1511,8 @@ int plugin_init(int *argc, char **argv, int flags)
|
||||
init_plugin_psi_keys();
|
||||
#endif
|
||||
|
||||
init_alloc_root(&plugin_mem_root, 4096, 4096);
|
||||
init_alloc_root(&tmp_root, 4096, 4096);
|
||||
init_alloc_root(&plugin_mem_root, 4096, 4096, MYF(0));
|
||||
init_alloc_root(&tmp_root, 4096, 4096, MYF(0));
|
||||
|
||||
if (my_hash_init(&bookmark_hash, &my_charset_bin, 16, 0, 0,
|
||||
get_bookmark_hash_key, NULL, HASH_UNIQUE))
|
||||
@ -1522,9 +1522,9 @@ int plugin_init(int *argc, char **argv, int flags)
|
||||
mysql_mutex_init(key_LOCK_plugin, &LOCK_plugin, MY_MUTEX_INIT_FAST);
|
||||
|
||||
if (my_init_dynamic_array(&plugin_dl_array,
|
||||
sizeof(struct st_plugin_dl *),16,16) ||
|
||||
sizeof(struct st_plugin_dl *), 16, 16, MYF(0)) ||
|
||||
my_init_dynamic_array(&plugin_array,
|
||||
sizeof(struct st_plugin_int *),16,16))
|
||||
sizeof(struct st_plugin_int *), 16, 16, MYF(0)))
|
||||
goto err;
|
||||
|
||||
for (i= 0; i < MYSQL_MAX_PLUGIN_TYPE_NUM; i++)
|
||||
@ -1723,12 +1723,11 @@ static bool register_builtin(struct st_maria_plugin *plugin,
|
||||
*/
|
||||
static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv)
|
||||
{
|
||||
THD thd;
|
||||
TABLE_LIST tables;
|
||||
TABLE *table;
|
||||
READ_RECORD read_record_info;
|
||||
int error;
|
||||
THD *new_thd= &thd;
|
||||
THD *new_thd= new THD;
|
||||
bool result;
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
No_such_table_error_handler error_handler;
|
||||
@ -1739,7 +1738,7 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv)
|
||||
new_thd->store_globals();
|
||||
new_thd->db= my_strdup("mysql", MYF(0));
|
||||
new_thd->db_length= 5;
|
||||
bzero((char*) &thd.net, sizeof(thd.net));
|
||||
bzero((char*) &new_thd->net, sizeof(new_thd->net));
|
||||
tables.init_one_table("mysql", 5, "plugin", 6, "plugin", TL_READ);
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
@ -1806,7 +1805,8 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv)
|
||||
close_mysql_tables(new_thd);
|
||||
end:
|
||||
/* Remember that we don't have a THD */
|
||||
my_pthread_setspecific_ptr(THR_THD, 0);
|
||||
delete new_thd;
|
||||
set_current_thd(0);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -1882,8 +1882,11 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv,
|
||||
DBUG_RETURN(FALSE);
|
||||
error:
|
||||
mysql_mutex_unlock(&LOCK_plugin);
|
||||
sql_print_error("Couldn't load plugin named '%s' with soname '%s'.",
|
||||
name.str, dl.str);
|
||||
if (name.str)
|
||||
sql_print_error("Couldn't load plugin '%s' from '%s'.",
|
||||
name.str, dl.str);
|
||||
else
|
||||
sql_print_error("Couldn't load plugins from '%s'.", dl.str);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
@ -2028,7 +2031,7 @@ static bool finalize_install(THD *thd, TABLE *table, const LEX_STRING *name)
|
||||
struct st_plugin_int *tmp= plugin_find_internal(name, MYSQL_ANY_PLUGIN);
|
||||
int error;
|
||||
DBUG_ASSERT(tmp);
|
||||
mysql_mutex_assert_owner(&LOCK_plugin);
|
||||
mysql_mutex_assert_owner(&LOCK_plugin); // because of tmp->state
|
||||
|
||||
if (tmp->state == PLUGIN_IS_DISABLED)
|
||||
{
|
||||
@ -2115,8 +2118,12 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name,
|
||||
|
||||
This hack should be removed when LOCK_plugin is fixed so it
|
||||
protects only what it supposed to protect.
|
||||
|
||||
See also mysql_uninstall_plugin() and initialize_audit_plugin()
|
||||
*/
|
||||
mysql_audit_acquire_plugins(thd, MYSQL_AUDIT_GENERAL_CLASS);
|
||||
unsigned long event_class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE] =
|
||||
{ MYSQL_AUDIT_GENERAL_CLASSMASK };
|
||||
mysql_audit_acquire_plugins(thd, event_class_mask);
|
||||
|
||||
mysql_mutex_lock(&LOCK_plugin);
|
||||
mysql_rwlock_wrlock(&LOCK_system_variables_hash);
|
||||
@ -2259,8 +2266,15 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name,
|
||||
When audit event is triggered during [UN]INSTALL PLUGIN, plugin
|
||||
list iterator acquires the same lock (within the same thread)
|
||||
second time.
|
||||
|
||||
This hack should be removed when LOCK_plugin is fixed so it
|
||||
protects only what it supposed to protect.
|
||||
|
||||
See also mysql_install_plugin() and initialize_audit_plugin()
|
||||
*/
|
||||
mysql_audit_acquire_plugins(thd, MYSQL_AUDIT_GENERAL_CLASS);
|
||||
unsigned long event_class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE] =
|
||||
{ MYSQL_AUDIT_GENERAL_CLASSMASK };
|
||||
mysql_audit_acquire_plugins(thd, event_class_mask);
|
||||
|
||||
mysql_mutex_lock(&LOCK_plugin);
|
||||
|
||||
@ -2270,11 +2284,19 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name,
|
||||
{
|
||||
fix_dl_name(thd->mem_root, &dl);
|
||||
st_plugin_dl *plugin_dl= plugin_dl_find(&dl);
|
||||
struct st_maria_plugin *plugin;
|
||||
for (plugin= plugin_dl->plugins; plugin->info; plugin++)
|
||||
if (plugin_dl)
|
||||
{
|
||||
LEX_STRING str= { const_cast<char*>(plugin->name), strlen(plugin->name) };
|
||||
error|= do_uninstall(thd, table, &str);
|
||||
for (struct st_maria_plugin *plugin= plugin_dl->plugins;
|
||||
plugin->info; plugin++)
|
||||
{
|
||||
LEX_STRING str= { const_cast<char*>(plugin->name), strlen(plugin->name) };
|
||||
error|= do_uninstall(thd, table, &str);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "SONAME", dl.str);
|
||||
error= true;
|
||||
}
|
||||
}
|
||||
reap_plugins();
|
||||
|
Reference in New Issue
Block a user