mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
A review comment for WL#4441 " LOCK_open: Remove requirement of
mutex protecting thd->open_tables". We should not manipulate with table->s->version outside the table definition cache code, but use the TDC API to achieve the desired result. Fix one violation: close_all_tables_for_name(). sql/sql_base.cc: Use tdc_remove_table(TDC_RT_REMOVE_ALL) to expel the table share in close_all_tables_for_name, rather than manipulate with the table cache explicitly. Make sure that close_cached_tables() calls close_all_tables_for_name() after closing all the involved handlers. The rest of the code was inspected to make sure that mysql_ha_rm_tables() is called. sql/sql_handler.cc: Add a method to close all HANDLER cursors for a list of tables. sql/sql_handler.h: Add declaration for mysql_ha_flush_tables().
This commit is contained in:
@ -833,6 +833,35 @@ void mysql_ha_rm_tables(THD *thd, TABLE_LIST *tables)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Close cursors of matching tables from the HANDLER's hash table.
|
||||
|
||||
@param thd Thread identifier.
|
||||
@param tables The list of tables to flush.
|
||||
*/
|
||||
|
||||
void mysql_ha_flush_tables(THD *thd, TABLE_LIST *all_tables)
|
||||
{
|
||||
DBUG_ENTER("mysql_ha_flush_tables");
|
||||
|
||||
for (TABLE_LIST *table_list= all_tables; table_list;
|
||||
table_list= table_list->next_global)
|
||||
{
|
||||
TABLE_LIST *hash_tables= mysql_ha_find(thd, table_list);
|
||||
/* Close all aliases of the same table. */
|
||||
while (hash_tables)
|
||||
{
|
||||
TABLE_LIST *next_local= hash_tables->next_local;
|
||||
if (hash_tables->table)
|
||||
mysql_ha_close_table(thd, hash_tables);
|
||||
hash_tables= next_local;
|
||||
}
|
||||
}
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Flush (close and mark for re-open) all tables that should be should
|
||||
be reopen.
|
||||
|
Reference in New Issue
Block a user