mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-10424 - Assertion `ticket == __null' failed in MDL_request::set_type
Reexecution of prepared "ANALYZE TABLE merge_table, table" may miss to reinitialize "table" for subsequent execution and trigger assertion failure. This happens because MERGE engine may adjust table->next_global chain, which gets cleared by close_thread_tables()/ha_myisammrg::detach_children() later. Since reinitilization iterates next_global chain, it won't see tables following merge table. Fixed by appending saved next_global chain after merge children.
This commit is contained in:
@ -441,7 +441,19 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
||||
}
|
||||
thd->prepare_derived_at_open= FALSE;
|
||||
|
||||
table->next_global= save_next_global;
|
||||
/*
|
||||
MERGE engine may adjust table->next_global chain, thus we have to
|
||||
append save_next_global after merge children.
|
||||
*/
|
||||
if (save_next_global)
|
||||
{
|
||||
TABLE_LIST *table_list_iterator= table;
|
||||
while (table_list_iterator->next_global)
|
||||
table_list_iterator= table_list_iterator->next_global;
|
||||
table_list_iterator->next_global= save_next_global;
|
||||
save_next_global->prev_global= &table_list_iterator->next_global;
|
||||
}
|
||||
|
||||
table->next_local= save_next_local;
|
||||
thd->open_options&= ~extra_open_options;
|
||||
|
||||
|
Reference in New Issue
Block a user