From 1fb33e4a67918009e015967a41da6dbd65760ffa Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 13 Jun 2013 20:19:11 +0200 Subject: [PATCH] MDEV-4529 Assertion `tmp->state == 4' fails on mix of INSTALL SONAME / UNINSTALL PLUGIN fix incorrect assert --- mysql-test/r/plugin.result | 19 +++++++++++++++++++ mysql-test/t/plugin.test | 14 ++++++++++++++ sql/sql_plugin.cc | 6 +++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/plugin.result b/mysql-test/r/plugin.result index 3b706817285..12bcf5ff68e 100644 --- a/mysql-test/r/plugin.result +++ b/mysql-test/r/plugin.result @@ -173,3 +173,22 @@ select 1; UNINSTALL PLUGIN example; UNINSTALL PLUGIN MyISAM; ERROR HY000: Built-in plugins cannot be deleted +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +plugin_name +install soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +plugin_name +EXAMPLE +UNUSABLE +uninstall plugin example; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +plugin_name +UNUSABLE +install soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +plugin_name +EXAMPLE +UNUSABLE +uninstall soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +plugin_name diff --git a/mysql-test/t/plugin.test b/mysql-test/t/plugin.test index 02df863f52d..18a928a9260 100644 --- a/mysql-test/t/plugin.test +++ b/mysql-test/t/plugin.test @@ -155,3 +155,17 @@ UNINSTALL PLUGIN example; --error ER_PLUGIN_DELETE_BUILTIN UNINSTALL PLUGIN MyISAM; +# +# MDEV-4529 Assertion `tmp->state == 4' fails on mix of INSTALL SONAME / UNINSTALL PLUGIN +# + +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +install soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +uninstall plugin example; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +install soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +uninstall soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; + diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 55047a6da61..40ccd275947 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -2032,9 +2032,13 @@ static bool finalize_install(THD *thd, TABLE *table, const LEX_STRING *name) ER_CANT_INITIALIZE_UDF, ER(ER_CANT_INITIALIZE_UDF), name->str, "Plugin is disabled"); } + else if (tmp->state != PLUGIN_IS_UNINITIALIZED) + { + /* already installed */ + return 0; + } else { - DBUG_ASSERT(tmp->state == PLUGIN_IS_UNINITIALIZED); if (plugin_initialize(tmp)) { report_error(REPORT_TO_USER, ER_CANT_INITIALIZE_UDF, name->str,