mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge fix for BUG#54989 to mysql-5.5-bugfixing.
This commit is contained in:
@ -29,7 +29,7 @@
|
||||
#include "records.h" // init_read_record, end_read_record
|
||||
#include <my_pthread.h>
|
||||
#include <my_getopt.h>
|
||||
#include <mysql/plugin_audit.h>
|
||||
#include "sql_audit.h"
|
||||
#include "lock.h" // MYSQL_LOCK_IGNORE_TIMEOUT
|
||||
#define REPORT_TO_LOG 1
|
||||
#define REPORT_TO_USER 2
|
||||
@ -1709,6 +1709,27 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
|
||||
MYSQL_LOCK_IGNORE_TIMEOUT)))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
/*
|
||||
Pre-acquire audit plugins for events that may potentially occur
|
||||
during [UN]INSTALL PLUGIN.
|
||||
|
||||
When audit event is triggered, audit subsystem acquires interested
|
||||
plugins by walking through plugin list. Evidently plugin list
|
||||
iterator protects plugin list by acquiring LOCK_plugin, see
|
||||
plugin_foreach_with_mask().
|
||||
|
||||
On the other hand [UN]INSTALL PLUGIN is acquiring LOCK_plugin
|
||||
rather for a long time.
|
||||
|
||||
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.
|
||||
*/
|
||||
mysql_audit_acquire_plugins(thd, MYSQL_AUDIT_GENERAL_CLASS);
|
||||
|
||||
mysql_mutex_lock(&LOCK_plugin);
|
||||
mysql_rwlock_wrlock(&LOCK_system_variables_hash);
|
||||
|
||||
@ -1789,6 +1810,27 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name)
|
||||
if (! (table= open_ltable(thd, &tables, TL_WRITE, MYSQL_LOCK_IGNORE_TIMEOUT)))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
/*
|
||||
Pre-acquire audit plugins for events that may potentially occur
|
||||
during [UN]INSTALL PLUGIN.
|
||||
|
||||
When audit event is triggered, audit subsystem acquires interested
|
||||
plugins by walking through plugin list. Evidently plugin list
|
||||
iterator protects plugin list by acquiring LOCK_plugin, see
|
||||
plugin_foreach_with_mask().
|
||||
|
||||
On the other hand [UN]INSTALL PLUGIN is acquiring LOCK_plugin
|
||||
rather for a long time.
|
||||
|
||||
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.
|
||||
*/
|
||||
mysql_audit_acquire_plugins(thd, MYSQL_AUDIT_GENERAL_CLASS);
|
||||
|
||||
mysql_mutex_lock(&LOCK_plugin);
|
||||
if (!(plugin= plugin_find_internal(name, MYSQL_ANY_PLUGIN)))
|
||||
{
|
||||
|
Reference in New Issue
Block a user