mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge mysql.com:/home/my/mysql-5.0
into mysql.com:/home/my/mysql-5.1
This commit is contained in:
@ -373,6 +373,11 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos,
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
Call readers_addref before opening log to track count
|
||||
of binlog readers
|
||||
*/
|
||||
mysql_bin_log.readers_addref();
|
||||
if ((file=open_binlog(&log, log_file_name, &errmsg)) < 0)
|
||||
{
|
||||
my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG;
|
||||
@ -570,7 +575,8 @@ impossible position";
|
||||
goto err;
|
||||
|
||||
if (!(flags & BINLOG_DUMP_NON_BLOCK) &&
|
||||
mysql_bin_log.is_active(log_file_name))
|
||||
mysql_bin_log.is_active(log_file_name) &&
|
||||
!mysql_bin_log.is_reset_pending())
|
||||
{
|
||||
/*
|
||||
Block until there is more data in the log
|
||||
@ -684,6 +690,13 @@ impossible position";
|
||||
{
|
||||
bool loop_breaker = 0;
|
||||
// need this to break out of the for loop from switch
|
||||
|
||||
// if we are going to switch log file anyway, close current log first
|
||||
end_io_cache(&log);
|
||||
(void) my_close(file, MYF(MY_WME));
|
||||
// decrease reference count of binlog readers
|
||||
mysql_bin_log.readers_release();
|
||||
|
||||
thd->proc_info = "Finished reading one binlog; switching to next binlog";
|
||||
switch (mysql_bin_log.find_next_log(&linfo, 1)) {
|
||||
case LOG_INFO_EOF:
|
||||
@ -692,16 +705,25 @@ impossible position";
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
// need following call to do release on err label
|
||||
mysql_bin_log.readers_addref();
|
||||
errmsg = "could not find next log";
|
||||
my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (loop_breaker)
|
||||
break;
|
||||
if (loop_breaker)
|
||||
{
|
||||
// need following call to do release on end label
|
||||
mysql_bin_log.readers_addref();
|
||||
break;
|
||||
}
|
||||
|
||||
end_io_cache(&log);
|
||||
(void) my_close(file, MYF(MY_WME));
|
||||
/*
|
||||
Call readers_addref before opening log to track count
|
||||
of binlog readers
|
||||
*/
|
||||
mysql_bin_log.readers_addref();
|
||||
|
||||
/*
|
||||
Call fake_rotate_event() in case the previous log (the one which
|
||||
@ -734,6 +756,8 @@ end:
|
||||
|
||||
end_io_cache(&log);
|
||||
(void)my_close(file, MYF(MY_WME));
|
||||
// decrease reference count of binlog readers
|
||||
mysql_bin_log.readers_release();
|
||||
|
||||
send_eof(thd);
|
||||
thd->proc_info = "Waiting to finalize termination";
|
||||
@ -760,6 +784,9 @@ err:
|
||||
pthread_mutex_unlock(&LOCK_thread_count);
|
||||
if (file >= 0)
|
||||
(void) my_close(file, MYF(MY_WME));
|
||||
// decrease reference count of binlog readers
|
||||
mysql_bin_log.readers_release();
|
||||
|
||||
my_message(my_errno, errmsg, MYF(0));
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
Reference in New Issue
Block a user