Pantek Library
Hosting Provided By
CybrHost
High Speed Hosting

bk commit into 5.1 tree (anozdrin:1.2600) BUG#31111

From: Alexander Nozdrin <alik(at)mysql.com>
Date: Tue Oct 16 2007 - 06:22:44 EDT


Below is the list of changes that have just been committed into a local 5.1 repository of alik. When alik does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository.
For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@1.2600, 2007-10-16 14:22:38+04:00, anozdrin@station. +4 -0   Patch for BUG#31111: --read-only crashes MySQL (events fail to load).   

  There actually were several problems here:

  • wrong lock type was acquired before reading mysql.event table;
  • Security_context::master_access attribute was not properly initialized in Security_context::init(), which led to differences in behavior with and without debug configure options.
  • if the server failed to load events from mysql.event, it:
    • forgot to close the mysql.event table, that led to the coredump, described in the bug report;
    • did not deinitialize the replication module, that lead to memory-lost warning on exit.

  The patch is to fix all these problems:

  • Use READ-lock when loading events from the mysql.event table;
  • Initialize Security_context::master_access;
  • Close the mysql.event table in case something went wrong;
  • Deinitialize the replication module on exit.

  sql/event_db_repository.cc@1.37, 2007-10-16 14:22:36+04:00, anozdrin@station. +6 -0     Close tables if something went wrong in simple_open_n_lock_tables().

  sql/events.cc@1.85, 2007-10-16 14:22:36+04:00, anozdrin@station. +1 -1     Use READ-lock for loading events.

  sql/mysqld.cc@1.670, 2007-10-16 14:22:36+04:00, anozdrin@station. +3 -0     If something went wrong with event loading, we the replication     module should be deinitialized prior to general exit procedure.

  sql/sql_class.cc@1.351, 2007-10-16 14:22:36+04:00, anozdrin@station. +1 -0     Initialize Security_context::master_acces.

Do you need help?X

diff -Nrup a/sql/event_db_repository.cc b/sql/event_db_repository.cc

--- a/sql/event_db_repository.cc	2007-08-25 12:43:10 +04:00
+++ b/sql/event_db_repository.cc	2007-10-16 14:22:36 +04:00
@@ -525,6 +525,9 @@ Event_db_repository::fill_schema_events(
  • whether this open mode would work under LOCK TABLES, or inside a stored function or trigger.
+  Note, if the table can not be open, this operation will clean out all
+  table-related objects from the memory.
+
   @param[in]  thd  Thread context

   @param[in] lock_type How to lock the table    @param[out] table We will store the open table here @@ -544,7 +547,10 @@ Event_db_repository::open_event_table(TH

   tables.init_one_table("mysql", "event", lock_type);  

   if (simple_open_n_lock_tables(thd, &tables)) + {
+ close_thread_tables(thd, FALSE, FALSE);

     DBUG_RETURN(TRUE);
+ }  

   *table= tables.table;
   tables.table->use_all_columns();
diff -Nrup a/sql/events.cc b/sql/events.cc

--- a/sql/events.cc	2007-08-15 19:08:40 +04:00
+++ b/sql/events.cc	2007-10-16 14:22:36 +04:00
@@ -1128,7 +1128,7 @@ Events::load_events_from_db(THD *thd)

   DBUG_ENTER("Events::load_events_from_db");    DBUG_PRINT("enter", ("thd: 0x%lx", (long) thd));  

  • if (db_repository->open_event_table(thd, TL_WRITE, &table)) + if (db_repository->open_event_table(thd, TL_READ, &table)) { sql_print_error("Event Scheduler: Failed to open table mysql.event"); DBUG_RETURN(TRUE); diff -Nrup a/sql/mysqld.cc b/sql/mysqld.cc --- a/sql/mysqld.cc 2007-08-28 11:02:53 +04:00 +++ b/sql/mysqld.cc 2007-10-16 14:22:36 +04:00 @@ -3930,7 +3930,10 @@ we force server id to 2, but this MySQL create_maintenance_thread();

   if (Events::init(opt_noacl))
+ {
+ end_slave();

     unireg_abort(1);
+ }  

Do you need more help?X

   sql_print_information(ER(ER_STARTUP),my_progname,server_version,

                         ((unix_sock == INVALID_SOCKET) ? (char*) ""
diff -Nrup a/sql/sql_class.cc b/sql/sql_class.cc
--- a/sql/sql_class.cc	2007-10-15 16:42:39 +04:00
+++ b/sql/sql_class.cc	2007-10-16 14:22:36 +04:00
@@ -2404,6 +2404,7 @@ void Security_context::init()

   host= user= priv_user= ip= 0;
   host_or_ip= "connecting host";
   priv_host[0]= '\0';
+ master_access= 0;
 #ifndef NO_EMBEDDED_ACCESS_CHECKS
   db_access= NO_ACCESS;
 #endif

-- 
MySQL Code Commits Mailing List
For list archives: 
http://lists.mysql.com/commits
To unsubscribe:    
http://lists.mysql.com/commits?unsub=lists@pantek.com
Received on Tue Oct 16 06:31:49 2007

This archive was generated by hypermail 2.1.8 : Thu Jul 03 2008 - 09:57:50 EDT


Contact Us  Legal Notices  Order Services Online 
Pantek Home  Privacy Policy  IT news  Site Map  Pantek Library