List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:March 12 2009 6:01pm
Subject:bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:2832)
Bug#42610
View as plain text  
#At file:///home/gluh/MySQL/mysql-5.1-bug-42610.1/ based on revid:timothy.smith@stripped

 2832 Sergey Glukhov	2009-03-12
      Bug#42610 Dynamic plugin broken in 5.1.31
      --added ability to obtain plugin variables from my.cnf on INSTALL PLUGIN stage
      --option 'ignore-builtin-innodb' disables all InnoDB builtin plugins
      (including I_S plugins)
     @ sql/mysql_priv.h
        --added ability to obtain plugin variables from my.cnf on INSTALL PLUGIN stage
     @ sql/mysqld.cc
        --added ability to obtain plugin variables from my.cnf on INSTALL PLUGIN stage
     @ sql/sql_plugin.cc
        --added ability to obtain plugin variables from my.cnf on INSTALL PLUGIN stage
        --option 'ignore-builtin-innodb' disables all InnoDB builtin plugins
        (including I_S plugins)

    modified:
      sql/mysql_priv.h
      sql/mysqld.cc
      sql/sql_plugin.cc
=== modified file 'sql/mysql_priv.h'
--- a/sql/mysql_priv.h	2009-02-24 11:29:49 +0000
+++ b/sql/mysql_priv.h	2009-03-12 18:01:24 +0000
@@ -2047,6 +2047,9 @@ extern SHOW_COMP_OPTION have_geometry, h
 extern SHOW_COMP_OPTION have_crypt;
 extern SHOW_COMP_OPTION have_compress;
 
+extern int orig_argc;
+extern char **orig_argv;
+extern const char *load_default_groups[];
 
 #ifndef __WIN__
 extern pthread_t signal_thread;

=== modified file 'sql/mysqld.cc'
--- a/sql/mysqld.cc	2009-02-25 08:49:02 +0000
+++ b/sql/mysqld.cc	2009-03-12 18:01:24 +0000
@@ -648,6 +648,9 @@ static int defaults_argc;
 static char **defaults_argv;
 static char *opt_bin_logname;
 
+int orig_argc;
+char **orig_argv;
+
 static my_socket unix_sock,ip_sock;
 struct rand_struct sql_rand; ///< used by sql_class.cc:THD::THD()
 
@@ -2923,7 +2926,7 @@ pthread_handler_t handle_shutdown(void *
 #endif
 
 #if !defined(EMBEDDED_LIBRARY)
-static const char *load_default_groups[]= {
+const char *load_default_groups[]= {
 #ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
 "mysql_cluster",
 #endif
@@ -3221,6 +3224,8 @@ static int init_common_variables(const c
                      SQLCOM_END + 8);
 #endif
 
+  orig_argc=argc;
+  orig_argv=argv;
   load_defaults(conf_file_name, groups, &argc, &argv);
   defaults_argv=argv;
   defaults_argc=argc;
@@ -3883,6 +3888,7 @@ server.");
     if ((ho_error= handle_options(&defaults_argc, &tmp_argv, no_opts,
                                   mysqld_get_one_option)))
       unireg_abort(ho_error);
+    my_getopt_skip_unknown= TRUE;
 
     if (defaults_argc)
     {

=== modified file 'sql/sql_plugin.cc'
--- a/sql/sql_plugin.cc	2009-02-09 15:03:52 +0000
+++ b/sql/sql_plugin.cc	2009-03-12 18:01:24 +0000
@@ -1139,8 +1139,9 @@ int plugin_init(int *argc, char **argv, 
     for (plugin= *builtins; plugin->info; plugin++)
     {
       if (opt_ignore_builtin_innodb &&
-          !my_strcasecmp(&my_charset_latin1, plugin->name, "InnoDB"))
-          continue;
+          !my_strnncoll(&my_charset_latin1, (const uchar*) plugin->name,
+                        6, (const uchar*) "InnoDB", 6))
+        continue;
       /* by default, ndbcluster and federated are disabled */
       def_enabled=
         my_strcasecmp(&my_charset_latin1, plugin->name, "NDBCLUSTER") != 0 &&
@@ -1633,8 +1634,8 @@ bool mysql_install_plugin(THD *thd, cons
 {
   TABLE_LIST tables;
   TABLE *table;
-  int error, argc;
-  char *argv[2];
+  int error, argc=orig_argc;
+  char **argv=orig_argv;
   struct st_plugin_int *tmp;
   DBUG_ENTER("mysql_install_plugin");
 
@@ -1650,21 +1651,31 @@ bool mysql_install_plugin(THD *thd, cons
 
   pthread_mutex_lock(&LOCK_plugin);
   rw_wrlock(&LOCK_system_variables_hash);
-  /* handle_options() assumes arg0 (program name) always exists */
-  argv[0]= const_cast<char*>(""); // without a cast gcc emits a warning
-  argv[1]= 0;
-  argc= 1;
+
+  load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv);
   error= plugin_add(thd->mem_root, name, dl, &argc, argv, REPORT_TO_USER);
+  if (argv)
+    free_defaults(argv);
   rw_unlock(&LOCK_system_variables_hash);
 
   if (error || !(tmp= plugin_find_internal(name, MYSQL_ANY_PLUGIN)))
     goto err;
 
-  if (plugin_initialize(tmp))
+  if (tmp->state == PLUGIN_IS_DISABLED)
   {
-    my_error(ER_CANT_INITIALIZE_UDF, MYF(0), name->str,
-             "Plugin initialization function failed.");
-    goto deinit;
+    push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                        ER_CANT_INITIALIZE_UDF, ER(ER_CANT_INITIALIZE_UDF),
+                        name->str, "Plugin is disabled");
+  }
+  else
+  {
+    DBUG_ASSERT(tmp->state == PLUGIN_IS_UNINITIALIZED);
+    if (plugin_initialize(tmp))
+    {
+      my_error(ER_CANT_INITIALIZE_UDF, MYF(0), name->str,
+               "Plugin initialization function failed.");
+      goto deinit;
+    }
   }
 
   /*


Attachment: [text/bzr-bundle] bzr/sergey.glukhov@sun.com-20090312180124-iy9iu41rn11xg6ao.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:2832)Bug#42610Sergey Glukhov12 Mar
  • Re: bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:2832)Bug#42610Sergei Golubchik12 Mar