MDEV-25663 Double free of transaction during truncate operation
InnoDB truncate table fails to load the fts stopword table into cache. In that case, InnoDB double frees the truncate creation transaction. InnoDB should free the transaction which was created inside ha_innobase::create.
This commit is contained in:
parent
c88e9342f3
commit
98f7b2cb09
@ -13024,7 +13024,6 @@ create_table_info_t::create_table_update_dict()
|
|||||||
if (!innobase_fts_load_stopword(innobase_table, NULL, m_thd)) {
|
if (!innobase_fts_load_stopword(innobase_table, NULL, m_thd)) {
|
||||||
dict_table_close(innobase_table, FALSE, FALSE);
|
dict_table_close(innobase_table, FALSE, FALSE);
|
||||||
srv_active_wake_master_thread();
|
srv_active_wake_master_thread();
|
||||||
trx_free_for_mysql(m_trx);
|
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13169,6 +13168,12 @@ ha_innobase::create(
|
|||||||
|
|
||||||
error = info.create_table_update_dict();
|
error = info.create_table_update_dict();
|
||||||
|
|
||||||
|
/* In case of error, free the transaction only if
|
||||||
|
it is newly created transaction in ha_innobase::create() */
|
||||||
|
if (own_trx && error) {
|
||||||
|
trx_free_for_mysql(info.trx());
|
||||||
|
}
|
||||||
|
|
||||||
/* Tell the InnoDB server that there might be work for
|
/* Tell the InnoDB server that there might be work for
|
||||||
utility threads: */
|
utility threads: */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user