summaryrefslogtreecommitdiff
path: root/sql/sql_repl.cc
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2001-09-01 10:38:16 +0300
committerunknown <monty@hundin.mysql.fi>2001-09-01 10:38:16 +0300
commit9591abbd399bb4b85db9da458fba5ed972c97afa (patch)
treec8989889543a2c502ec6a75d58738675ffac837c /sql/sql_repl.cc
parent4295917682a23b6f8d493d9433b0b7c1f244c421 (diff)
downloadmariadb-git-9591abbd399bb4b85db9da458fba5ed972c97afa.tar.gz
Make killing of threads safer
Docs/manual.texi: Changelog sql/sql_insert.cc: Fix problem with INSERT DELAYED during shutdown
Diffstat (limited to 'sql/sql_repl.cc')
-rw-r--r--sql/sql_repl.cc9
1 files changed, 4 insertions, 5 deletions
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index b9ba284ab27..7d4a7847eb1 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -414,12 +414,10 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags)
log.error=0;
// tell the kill thread how to wake us up
- pthread_mutex_lock(&thd->mysys_var->mutex);
thd->mysys_var->current_mutex = log_lock;
thd->mysys_var->current_cond = &COND_binlog_update;
const char* proc_info = thd->proc_info;
thd->proc_info = "Slave connection: waiting for binlog update";
- pthread_mutex_unlock(&thd->mysys_var->mutex);
bool read_packet = 0, fatal_error = 0;
@@ -444,7 +442,8 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags)
break;
case LOG_READ_EOF:
DBUG_PRINT("wait",("waiting for data on binary log"));
- pthread_cond_wait(&COND_binlog_update, log_lock);
+ if (!thd->killed)
+ pthread_cond_wait(&COND_binlog_update, log_lock);
break;
default:
@@ -694,9 +693,9 @@ void kill_zombie_dump_threads(uint32 slave_server_id)
thr_alarm_kill(tmp->real_id);
tmp->killed = 1;
- pthread_mutex_lock(&tmp->mysys_var->mutex);
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);