summaryrefslogtreecommitdiff
path: root/sql/mysql_priv.h
diff options
context:
space:
mode:
authorunknown <ingo@mysql.com>2004-06-24 15:06:56 +0200
committerunknown <ingo@mysql.com>2004-06-24 15:06:56 +0200
commit8f6664c59a147469cd7abba8440ae43fc221b054 (patch)
tree3e35aa94e3031d9c40bbf2f3b31a48fb7979516e /sql/mysql_priv.h
parentc0edb2e0ceed434c2209e5e7083fb512f25f5433 (diff)
downloadmariadb-git-8f6664c59a147469cd7abba8440ae43fc221b054.tar.gz
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Redesigned the handler close functions so that they are usable at different places where waiting for closing tables is done. mysql-test/r/flush_table.result: bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock. Added the test results. mysql-test/t/flush_table.test: bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock. Activated old test case. Added new test cases. sql/mysql_priv.h: bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock. Made mysql_ha_close() more flexible. Removed mysql_ha_closeall(), which closed only one table despite its name. Added mysql_ha_close_list(), which closes the complete list or all tables and does not lock. Removed a duplicate declaration. sql/sql_base.cc: bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock. Added proper close calls before some wait points to avoid deadlocks or infinite loops. sql/sql_handler.cc: bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock. Redesigned the internal function find_table_ptr_by_name(). It can now suppress locking and tells if the requested table has been flushed by itself. Extended mysql_ha_close() so that it can now suppres locking and error reporting. That way it can be used at more places and the old function mysql_ha_closeall() is now obsolete. Added a new function mysql_ha_close_list() which closes a whole list of HANDLER tables or all HANDLER tables, if the list is NULL. Furthermore is can close all 'old' (marked for flush) HANDLER tables. sql/sql_table.cc: bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock. Replaced the obsolte mysql_ha_closeall() by the new mysql_ha_close().
Diffstat (limited to 'sql/mysql_priv.h')
-rw-r--r--sql/mysql_priv.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index b03d98f4cb0..5c15ae9a714 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -538,8 +538,9 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables,
/* sql_handler.cc */
int mysql_ha_open(THD *thd, TABLE_LIST *tables);
-int mysql_ha_close(THD *thd, TABLE_LIST *tables, bool dont_send_ok=0);
-int mysql_ha_closeall(THD *thd, TABLE_LIST *tables);
+int mysql_ha_close(THD *thd, TABLE_LIST *tables,
+ bool dont_send_ok=0, bool dont_lock=0, bool no_alias=0);
+int mysql_ha_close_list(THD *thd, TABLE_LIST *tables, bool flushed=0);
int mysql_ha_read(THD *, TABLE_LIST *,enum enum_ha_read_modes,char *,
List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows);
@@ -587,7 +588,6 @@ void free_io_cache(TABLE *entry);
void intern_close_table(TABLE *entry);
bool close_thread_table(THD *thd, TABLE **table_ptr);
void close_thread_tables(THD *thd,bool locked=0);
-bool close_thread_table(THD *thd, TABLE **table_ptr);
void close_temporary_tables(THD *thd);
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name);
bool close_temporary_table(THD *thd, const char *db, const char *table_name);