summaryrefslogtreecommitdiff
path: root/sql/sql_servers.h
diff options
context:
space:
mode:
authorunknown <acurtis/antony@xiphis.org/ltamd64.xiphis.org>2007-03-23 17:31:27 -0700
committerunknown <acurtis/antony@xiphis.org/ltamd64.xiphis.org>2007-03-23 17:31:27 -0700
commitcb5b56c8efc1752d6768547a6f0517455cdbe7e2 (patch)
tree940fb83635fedcb7cca2769977790520c88dfb5a /sql/sql_servers.h
parent09e4d0279e507f26e9b4cf2df28bc9ca4fe00f25 (diff)
downloadmariadb-git-cb5b56c8efc1752d6768547a6f0517455cdbe7e2.tar.gz
Bug#25721
"Concurrent ALTER/CREATE SERVER can lead to deadlock" Deadlock caused by inconsistant use of mutexes in sql_server.cc One mutex has been removed to resolve deadlock. Many functions were made private which should not be exported. Unused variables and function removed. mysql-test/r/federated_server.result: Bug 25721 "Concurrent ALTER/CREATE SERVER can lead to deadlock" New test results mysql-test/t/federated_server.test: Bug 25721 "Concurrent ALTER/CREATE SERVER can lead to deadlock" Test for bug by using stored procedure. Unpatched server would deadlock frequently. sql/sql_parse.cc: Bug 25721 "Concurrent ALTER/CREATE SERVER can lead to deadlock" check for correct error code when dropping server sql/sql_servers.cc: Bug 25721 "Concurrent ALTER/CREATE SERVER can lead to deadlock" Removed unneccessary mutex, only need THR_LOCK_servers rwlock to guard data structures against race conditions. Misuse of other mutex caused deadlock by inconsistant ordering of mutex lock operations. Alter order of some operations to hit memory before disk. Removed unused function. Removed servers_version and servers_cache_initialised variables. Made many internal functions static. sql/sql_servers.h: Bug 25721 "Concurrent ALTER/CREATE SERVER can lead to deadlock" remove internal functions from being exported.
Diffstat (limited to 'sql/sql_servers.h')
-rw-r--r--sql/sql_servers.h30
1 files changed, 4 insertions, 26 deletions
diff --git a/sql/sql_servers.h b/sql/sql_servers.h
index 23b8cefd5bb..9618374dcab 100644
--- a/sql/sql_servers.h
+++ b/sql/sql_servers.h
@@ -25,40 +25,18 @@ typedef struct st_federated_server
} FOREIGN_SERVER;
/* cache handlers */
-my_bool servers_init(bool dont_read_server_table);
-my_bool servers_reload(THD *thd);
-my_bool get_server_from_table_to_cache(TABLE *table);
+bool servers_init(bool dont_read_server_table);
+bool servers_reload(THD *thd);
void servers_free(bool end=0);
/* insert functions */
int create_server(THD *thd, LEX_SERVER_OPTIONS *server_options);
-int insert_server(THD *thd, FOREIGN_SERVER *server_options);
-int insert_server_record(TABLE *table, FOREIGN_SERVER *server);
-int insert_server_record_into_cache(FOREIGN_SERVER *server);
-void store_server_fields_for_insert(TABLE *table, FOREIGN_SERVER *server);
-void store_server_fields_for_insert(TABLE *table,
- FOREIGN_SERVER *existing,
- FOREIGN_SERVER *altered);
-int prepare_server_struct_for_insert(LEX_SERVER_OPTIONS *server_options,
- FOREIGN_SERVER *server);
/* drop functions */
int drop_server(THD *thd, LEX_SERVER_OPTIONS *server_options);
-int delete_server_record(TABLE *table,
- char *server_name,
- int server_name_length);
-int delete_server_record_in_cache(LEX_SERVER_OPTIONS *server_options);
/* update functions */
int alter_server(THD *thd, LEX_SERVER_OPTIONS *server_options);
-int prepare_server_struct_for_update(LEX_SERVER_OPTIONS *server_options,
- FOREIGN_SERVER *existing,
- FOREIGN_SERVER *altered);
-int update_server(THD *thd, FOREIGN_SERVER *existing, FOREIGN_SERVER *altered);
-int update_server_record(TABLE *table, FOREIGN_SERVER *server);
-int update_server_record_in_cache(FOREIGN_SERVER *existing,
- FOREIGN_SERVER *altered);
-/* utility functions */
-void merge_server_struct(FOREIGN_SERVER *from, FOREIGN_SERVER *to);
+
+/* lookup functions */
FOREIGN_SERVER *get_server_by_name(const char *server_name);
-my_bool server_exists_in_table(THD *thd, char *server_name);