#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#38692 | Kristofer Pettersson | 10 Sep |