1
0
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:
Konstantin Osipov
2010-06-09 12:39:09 +04:00
parent db716d11af
commit 8d42534182
3 changed files with 48 additions and 6 deletions

View File

@ -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.