mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 23:34:34 +01:00
branches/5.1:
Fix Bug#36169 create innodb compressed table with too large row size crashed Sometimes it is possible that row_drop_table_for_mysql(index->table_name, trx, FALSE); is invoked in row_create_index_for_mysql() when the index object is freed so copy the table name to a safe place beforehand and use the copy. Approved by: Sunny
This commit is contained in:
parent
3ce609c736
commit
16a019dcb8
1 changed files with 9 additions and 1 deletions
|
@ -1963,6 +1963,7 @@ row_create_index_for_mysql(
|
|||
ulint err;
|
||||
ulint i, j;
|
||||
ulint len;
|
||||
char* table_name;
|
||||
|
||||
#ifdef UNIV_SYNC_DEBUG
|
||||
ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX));
|
||||
|
@ -1972,6 +1973,11 @@ row_create_index_for_mysql(
|
|||
|
||||
trx->op_info = "creating index";
|
||||
|
||||
/* Copy the table name because we may want to drop the
|
||||
table later, after the index object is freed (inside
|
||||
que_run_threads()) and thus index->table_name is not available. */
|
||||
table_name = mem_strdup(index->table_name);
|
||||
|
||||
trx_start_if_not_started(trx);
|
||||
|
||||
/* Check that the same column does not appear twice in the index.
|
||||
|
@ -2044,13 +2050,15 @@ error_handling:
|
|||
|
||||
trx_general_rollback_for_mysql(trx, FALSE, NULL);
|
||||
|
||||
row_drop_table_for_mysql(index->table_name, trx, FALSE);
|
||||
row_drop_table_for_mysql(table_name, trx, FALSE);
|
||||
|
||||
trx->error_state = DB_SUCCESS;
|
||||
}
|
||||
|
||||
trx->op_info = "";
|
||||
|
||||
mem_free(table_name);
|
||||
|
||||
return((int) err);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue