1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

Bug#55091: Server crashes on ADD PARTITION after a failed attempt

In case of failure in ALTER ... PARTITION under LOCK TABLE
the server could crash, due to it had modified the locked
table object, which was not reverted in case of failure,
resulting in a bad table definition used after the failed
command.

Solved by always closing the LOCKED TABLE, even in case
of error.

Note: this is a 5.1-only fix, bug#56172 fixed it in 5.5+
This commit is contained in:
Mattias Jonsson
2010-10-05 14:57:51 +02:00
parent fa97a2f1b7
commit f3e2b3df18
4 changed files with 159 additions and 2 deletions

View File

@@ -5934,6 +5934,12 @@ static void alter_partition_lock_handling(ALTER_PARTITION_PARAM_TYPE *lpt)
int err;
if (lpt->thd->locked_tables)
{
/*
Close the table if open, to remove/destroy the already altered
table->part_info object, so that it is not reused.
*/
if (lpt->table->db_stat)
abort_and_upgrade_lock_and_close_table(lpt);
/*
When we have the table locked, it is necessary to reopen the table
since all table objects were closed and removed as part of the
@@ -6436,7 +6442,20 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
table, table_list, FALSE, NULL,
written_bin_log));
err:
close_thread_tables(thd);
if (thd->locked_tables)
{
/*
table->part_info was altered in prep_alter_part_table and must be
destroyed and recreated, since otherwise it will be reused, since
we are under LOCK TABLE.
*/
alter_partition_lock_handling(lpt);
}
else
{
/* Force the table to be closed to avoid reuse of the table->part_info */
close_thread_tables(thd);
}
DBUG_RETURN(TRUE);
}
#endif