Skip to content
Permalink
Browse files
MDEV-25651 Server crash or assertion failure in THD::update_stats upo…
…n concurrent DROP TRIGGER

The problem was that in a timeout event,
thd->lex->restore_backup_query_tables_list() was called when it should
not have been.

Patch tested with the script in MDEV-25651 (not suitable for mtr)
  • Loading branch information
montywi committed May 11, 2021
1 parent 621501f commit 0df51e6
Showing 1 changed file with 3 additions and 1 deletion.
@@ -396,6 +396,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
bool result= TRUE;
String stmt_query;
bool lock_upgrade_done= FALSE;
bool backup_of_table_list_done= 0;;
MDL_ticket *mdl_ticket= NULL;
MDL_request mdl_request_for_trn;
Query_tables_list backup;
@@ -465,6 +466,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
Protect the query table list from the temporary and potentially
destructive changes necessary to open the trigger's table.
*/
backup_of_table_list_done= 1;
thd->lex->reset_n_backup_query_tables_list(&backup);
/*
Restore Query_tables_list::sql_command, which was
@@ -634,7 +636,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
mdl_ticket->downgrade_lock(MDL_SHARED_NO_READ_WRITE);

/* Restore the query table list. Used only for drop trigger. */
if (!create)
if (backup_of_table_list_done)
thd->lex->restore_backup_query_tables_list(&backup);

if (!result)

0 comments on commit 0df51e6

Please sign in to comment.