summaryrefslogtreecommitdiff
path: root/sql/sql_insert.cc
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2001-10-02 21:08:08 +0300
committerunknown <monty@hundin.mysql.fi>2001-10-02 21:08:08 +0300
commit77b021005ef3648501b3413ac5bce4a7db495cf0 (patch)
tree10d5cc825ed60eb9400958861f0101e212097efb /sql/sql_insert.cc
parent396490901c77e3fce3aa8ab12a34760f5928567e (diff)
downloadmariadb-git-77b021005ef3648501b3413ac5bce4a7db495cf0.tar.gz
Fixed bug in INSERT DELAYED
Fixed some problems in SHOW CREATE TABLE Fixed calculation of checksums in myisamchk Docs/manual.texi: ChangelogWh client/mysql.cc: Added comment myisam/mi_check.c: Fixed calcualtion of checksums sql/sql_insert.cc: Fixed bug in INSERT DELAYED sql/sql_show.cc: Fixed some problems in SHOW CREATE TABLE
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r--sql/sql_insert.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index cd738999383..f7ff3ed159c 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -841,6 +841,7 @@ void kill_delayed_threads(void)
delayed_insert *tmp;
while ((tmp=it++))
{
+ /* Ensure that the thread doesn't kill itself while we are looking at it */
pthread_mutex_lock(&tmp->mutex);
tmp->thd.killed=1;
if (tmp->thd.mysys_var)
@@ -848,9 +849,15 @@ void kill_delayed_threads(void)
pthread_mutex_lock(&tmp->thd.mysys_var->mutex);
if (tmp->thd.mysys_var->current_cond)
{
- pthread_mutex_lock(tmp->thd.mysys_var->current_mutex);
+ /*
+ We need the following test because the main mutex may be locked
+ in handle_delayed_insert()
+ */
+ if (&tmp->mutex != tmp->thd.mysys_var->current_mutex)
+ pthread_mutex_lock(tmp->thd.mysys_var->current_mutex);
pthread_cond_broadcast(tmp->thd.mysys_var->current_cond);
- pthread_mutex_unlock(tmp->thd.mysys_var->current_mutex);
+ if (&tmp->mutex != tmp->thd.mysys_var->current_mutex)
+ pthread_mutex_unlock(tmp->thd.mysys_var->current_mutex);
}
pthread_mutex_unlock(&tmp->thd.mysys_var->mutex);
}