1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Fixes bug #13377. Added code to close active log files in case

of log reset condition.
This commit is contained in:
SergeyV@selena.
2005-10-03 20:34:42 +04:00
parent 78504ac33e
commit 7d0d7826bb
4 changed files with 122 additions and 7 deletions

View File

@ -372,6 +372,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;
@ -569,7 +574,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
@ -683,6 +689,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:
@ -691,16 +704,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
@ -733,6 +755,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";
@ -759,6 +783,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;
}