Commit c01aeb10 authored by Kristofer Pettersson's avatar Kristofer Pettersson

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.
parent 88e3906a
...@@ -2532,8 +2532,13 @@ bool Delayed_insert::handle_inserts(void) ...@@ -2532,8 +2532,13 @@ bool Delayed_insert::handle_inserts(void)
thd_proc_info(&thd, "upgrading lock"); thd_proc_info(&thd, "upgrading lock");
if (thr_upgrade_write_delay_lock(*thd.lock->locks)) 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; goto err;
} }
...@@ -2688,9 +2693,10 @@ bool Delayed_insert::handle_inserts(void) ...@@ -2688,9 +2693,10 @@ bool Delayed_insert::handle_inserts(void)
query_cache_invalidate3(&thd, table, 1); query_cache_invalidate3(&thd, table, 1);
if (thr_reschedule_write_lock(*thd.lock->locks)) if (thr_reschedule_write_lock(*thd.lock->locks))
{ {
/* This should never happen */ /* This is not known to happen. */
sql_print_error(ER(ER_DELAYED_CANT_CHANGE_LOCK), my_error(ER_DELAYED_CANT_CHANGE_LOCK,MYF(ME_FATALERROR),
table->s->table_name.str); table->s->table_name.str);
goto err;
} }
if (!using_bin_log) if (!using_bin_log)
table->file->extra(HA_EXTRA_WRITE_CACHE); table->file->extra(HA_EXTRA_WRITE_CACHE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment