summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/mysqlbinlog.cc2
-rw-r--r--sql/sql_parse.cc3
-rw-r--r--sql/sql_repl.cc8
3 files changed, 10 insertions, 3 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 842dfa28f88..b0175103840 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -327,7 +327,7 @@ static void dump_remote_log_entries(const char* logname)
len = net_safe_read(mysql);
if (len == packet_error)
die("Error reading packet from server: %s", mysql_error(mysql));
- if (len == 1 && net->read_pos[0] == 254)
+ if (len < 8 && net->read_pos[0] == 254)
break; // end of data
DBUG_PRINT("info",( "len= %u, net->read_pos[5] = %d\n",
len, net->read_pos[5]));
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 1ac4120187b..b2e1e56dc8f 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1160,7 +1160,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
pos = uint4korr(packet);
flags = uint2korr(packet + 4);
thd->server_id=0; /* avoid suicide */
- kill_zombie_dump_threads(slave_server_id = uint4korr(packet+6));
+ if ((slave_server_id= uint4korr(packet+6)))
+ kill_zombie_dump_threads(slave_server_id);
thd->server_id = slave_server_id;
mysql_binlog_send(thd, thd->strdup(packet + 10), (my_off_t) pos, flags);
unregister_slave(thd,1,1);
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index ae9bd8b7727..12228ec3ac8 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -522,6 +522,11 @@ Increase max_allowed_packet on master";
case LOG_READ_EOF:
DBUG_PRINT("wait",("waiting for data in binary log"));
+ if (thd->server_id==0)
+ {
+ pthread_mutex_unlock(log_lock);
+ goto end;
+ }
if (!thd->killed)
{
/* Note that the following call unlocks lock_log */
@@ -611,6 +616,7 @@ Increase max_allowed_packet on master";
}
}
+end:
end_io_cache(&log);
(void)my_close(file, MYF(MY_WME));
@@ -621,7 +627,7 @@ Increase max_allowed_packet on master";
pthread_mutex_unlock(&LOCK_thread_count);
DBUG_VOID_RETURN;
- err:
+err:
thd->proc_info = "waiting to finalize termination";
end_io_cache(&log);
/*