diff options
author | Sergei Golubchik <sergii@pisem.net> | 2012-02-15 18:08:08 +0100 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2012-02-15 18:08:08 +0100 |
commit | 25609313ffbd9205e921d0793cf423f711d10ced (patch) | |
tree | f04a1c26fabcc5463aca51a860f03131e02d94f7 /sql/sql_manager.cc | |
parent | 47a54a2e087a7c1fc861bcbc114c14987f492cfe (diff) | |
parent | 764eeeee74f999fe2107fc362236563be0025093 (diff) | |
download | mariadb-git-25609313ffbd9205e921d0793cf423f711d10ced.tar.gz |
5.3.4 merge
Diffstat (limited to 'sql/sql_manager.cc')
-rw-r--r-- | sql/sql_manager.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/sql/sql_manager.cc b/sql/sql_manager.cc index 221ba56130a..e9ac55730d3 100644 --- a/sql/sql_manager.cc +++ b/sql/sql_manager.cc @@ -43,6 +43,7 @@ static struct handler_cb * volatile cb_list; bool mysql_manager_submit(void (*action)()) { bool result= FALSE; + DBUG_ASSERT(manager_thread_in_use); struct handler_cb * volatile *cb; mysql_mutex_lock(&LOCK_manager); cb= &cb_list; @@ -74,8 +75,9 @@ pthread_handler_t handle_manager(void *arg __attribute__((unused))) pthread_detach_this_thread(); manager_thread = pthread_self(); + mysql_cond_init(key_COND_manager, &COND_manager,NULL); + mysql_mutex_init(key_LOCK_manager, &LOCK_manager, NULL); manager_thread_in_use = 1; - for (;;) { mysql_mutex_lock(&LOCK_manager); @@ -122,6 +124,8 @@ pthread_handler_t handle_manager(void *arg __attribute__((unused))) } } manager_thread_in_use = 0; + mysql_mutex_destroy(&LOCK_manager); + mysql_cond_destroy(&COND_manager); DBUG_LEAVE; // Can't use DBUG_RETURN after my_thread_end my_thread_end(); return (NULL); @@ -149,14 +153,14 @@ void stop_handle_manager() { DBUG_ENTER("stop_handle_manager"); abort_manager = true; - mysql_mutex_lock(&LOCK_manager); if (manager_thread_in_use) { + mysql_mutex_lock(&LOCK_manager); DBUG_PRINT("quit", ("initiate shutdown of handle manager thread: 0x%lx", (ulong)manager_thread)); mysql_cond_signal(&COND_manager); + mysql_mutex_unlock(&LOCK_manager); } - mysql_mutex_unlock(&LOCK_manager); DBUG_VOID_RETURN; } |