List:Commits« Previous MessageNext Message »
From:Kristofer Pettersson Date:September 10 2008 4:58pm
Subject:bzr commit into mysql-5.1 branch (kpettersson:2729) Bug#38692
View as plain text  
#At file:///home/thek/Development/cpp/mysqlbzr/mysql-5.1-bug38692/

 2729 Kristofer Pettersson	2008-09-10
      Bug#38692 concurrent inserts cause valgrind errors in Query_cache::invalidate
            
      If a delayed insert thread was aborted by a concurrent 'truncate table'
      statement, then the diagnostic area would fail with an assert in a debug build
      because no actual error message was pushed on the stack despite a thread
      being killed.
            
      This patch adds an error message to the stack.
modified:
  sql/sql_insert.cc

per-file messages:
  sql/sql_insert.cc
    * Changed sql_print_error() to my_error() to avoid assertion in the DA
    * Added assertion in "should never happen" branch.
=== modified file 'sql/sql_insert.cc'
--- a/sql/sql_insert.cc	2008-07-11 18:51:10 +0000
+++ b/sql/sql_insert.cc	2008-09-10 14:58:03 +0000
@@ -2532,8 +2532,13 @@ bool Delayed_insert::handle_inserts(void
   thd_proc_info(&thd, "upgrading lock");
   if (thr_upgrade_write_delay_lock(*thd.lock->locks))
   {
-    /* This can only happen if thread is killed by shutdown */
-    sql_print_error(ER(ER_DELAYED_CANT_CHANGE_LOCK),table->s->table_name.str);
+    /*
+      This can happen if thread is killed either by a shutdown
+      or if another thread is removing the current table definition
+      from the table cache.
+    */
+    my_error(ER_DELAYED_CANT_CHANGE_LOCK,MYF(ME_FATALERROR),
+             table->s->table_name.str);
     goto err;
   }
 
@@ -2688,9 +2693,10 @@ bool Delayed_insert::handle_inserts(void
 	query_cache_invalidate3(&thd, table, 1);
 	if (thr_reschedule_write_lock(*thd.lock->locks))
 	{
-	  /* This should never happen */
-	  sql_print_error(ER(ER_DELAYED_CANT_CHANGE_LOCK),
-                          table->s->table_name.str);
+    /* This is not known to happen. */
+    my_error(ER_DELAYED_CANT_CHANGE_LOCK,MYF(ME_FATALERROR),
+             table->s->table_name.str);
+    goto err;
 	}
 	if (!using_bin_log)
 	  table->file->extra(HA_EXTRA_WRITE_CACHE);

Thread
bzr commit into mysql-5.1 branch (kpettersson:2729) Bug#38692Kristofer Pettersson10 Sep