From: Date: September 10 2008 4:58pm Subject: bzr commit into mysql-5.1 branch (kpettersson:2729) Bug#38692 List-Archive: http://lists.mysql.com/commits/53701 X-Bug: 38692 Message-Id: <20080910145817.E08CE530088@Adventure> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #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);