diff options
author | unknown <monty@hundin.mysql.fi> | 2001-08-31 23:02:09 +0300 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2001-08-31 23:02:09 +0300 |
commit | 4295917682a23b6f8d493d9433b0b7c1f244c421 (patch) | |
tree | e26c23520c4a8d41f977bce9e83f52bdd4b00fc4 /sql | |
parent | 421e64ae356a1633ea50294b48c5025ea387a64d (diff) | |
download | mariadb-git-4295917682a23b6f8d493d9433b0b7c1f244c421.tar.gz |
Fixed problem with INSERT DELAYED
Make killing threads safer
Docs/manual.texi:
Portability fix
mysys/thr_lock.c:
Fixed problem with INSERT DELAYED
sql/mysqld.cc:
Make shutdown safer
sql/sql_class.cc:
Make kill thread safer
sql/sql_insert.cc:
Make kill thread safer
Diffstat (limited to 'sql')
-rw-r--r-- | sql/mysqld.cc | 4 | ||||
-rw-r--r-- | sql/sql_class.cc | 12 | ||||
-rw-r--r-- | sql/sql_insert.cc | 8 |
3 files changed, 14 insertions, 10 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc index b484eee3480..1255b55a81c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -509,12 +509,14 @@ static void close_connections(void) if (tmp->mysys_var) { tmp->mysys_var->abort=1; - if (tmp->mysys_var->current_mutex) + pthread_mutex_lock(&tmp->mysys_var->mutex); + if (tmp->mysys_var->current_cond) { pthread_mutex_lock(tmp->mysys_var->current_mutex); pthread_cond_broadcast(tmp->mysys_var->current_cond); pthread_mutex_unlock(tmp->mysys_var->current_mutex); } + pthread_mutex_unlock(&tmp->mysys_var->mutex); } } (void) pthread_mutex_unlock(&LOCK_thread_count); // For unlink from list diff --git a/sql/sql_class.cc b/sql/sql_class.cc index c57b59f55a6..ace7c291ed3 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -226,12 +226,12 @@ void THD::prepare_to_die() pthread_mutex_lock(&mysys_var->mutex); if (!system_thread) // Don't abort locks mysys_var->abort=1; - if (mysys_var->current_mutex) - { - pthread_mutex_lock(mysys_var->current_mutex); - pthread_cond_broadcast(mysys_var->current_cond); - pthread_mutex_unlock(mysys_var->current_mutex); - } + if (mysys_var->current_cond) + { + pthread_mutex_lock(mysys_var->current_mutex); + pthread_cond_broadcast(mysys_var->current_cond); + pthread_mutex_unlock(mysys_var->current_mutex); + } pthread_mutex_unlock(&mysys_var->mutex); } } diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index c14fbda3bc5..e6872fa1696 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -511,10 +511,12 @@ public: delayed_row *row; while ((row=rows.get())) delete row; - pthread_mutex_destroy(&mutex); if (table) close_thread_tables(&thd); VOID(pthread_mutex_lock(&LOCK_thread_count)); + pthread_mutex_destroy(&mutex); + pthread_cond_destroy(&cond); + pthread_cond_destroy(&cond_client); thd.unlink(); // Must be unlinked under lock x_free(thd.query); thd.user=thd.host=0; @@ -842,7 +844,7 @@ void kill_delayed_threads(void) if (tmp->thd.mysys_var) { pthread_mutex_lock(&tmp->thd.mysys_var->mutex); - if (tmp->thd.mysys_var->current_mutex) + if (tmp->thd.mysys_var->current_cond) { if (&tmp->mutex != tmp->thd.mysys_var->current_mutex) pthread_mutex_lock(tmp->thd.mysys_var->current_mutex); @@ -970,7 +972,7 @@ static pthread_handler_decl(handle_delayed_insert,arg) di->thd.proc_info=0; DBUG_PRINT("info",("Waiting for someone to insert rows")); - for ( ; ;) + while (!thd->killed) { int error; #if (defined(HAVE_BROKEN_COND_TIMEDWAIT) || defined(HAVE_LINUXTHREADS)) |