1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-23391 Crash/assertion CREATE OR REPLACE TABLE AS SELECT under LOCK TABLE

Happens with Innodb engine.

Move unlock_locked_table() past drop_open_table(), and
rollback current statement, so that we can actually unlock the table.

Anything else results in assertions, in drop, or unlock, or in close_table.
This commit is contained in:
Vladislav Vaintroub
2021-10-19 11:06:32 +02:00
parent 81b8547697
commit 6211c35549
3 changed files with 46 additions and 6 deletions

View File

@ -4708,12 +4708,6 @@ void select_create::abort_result_set()
/* possible error of writing binary log is ignored deliberately */
(void) thd->binlog_flush_pending_rows_event(TRUE, TRUE);
if (create_info->table_was_deleted)
{
/* Unlock locked table that was dropped by CREATE */
thd->locked_tables_list.unlock_locked_table(thd,
create_info->mdl_ticket);
}
if (table)
{
bool tmp_table= table->s->tmp_table;
@ -4751,5 +4745,13 @@ void select_create::abort_result_set()
tmp_table);
}
}
if (create_info->table_was_deleted)
{
/* Unlock locked table that was dropped by CREATE. */
(void) trans_rollback_stmt(thd);
thd->locked_tables_list.unlock_locked_table(thd, create_info->mdl_ticket);
}
DBUG_VOID_RETURN;
}