mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/home/mysql_src/mysql-4.0
This commit is contained in:
commit
ae67b97c4b
1 changed files with 26 additions and 5 deletions
29
sql/slave.cc
29
sql/slave.cc
|
@ -3498,7 +3498,19 @@ rli->relay_log_pos=%s rli->pending=%lu",
|
|||
flush_relay_log_info(rli);
|
||||
}
|
||||
|
||||
// next log is hot
|
||||
/*
|
||||
Now we want to open this next log. To know if it's a hot log (the one
|
||||
being written by the I/O thread now) or a cold log, we can use
|
||||
is_active(); if it is hot, we use the I/O cache; if it's cold we open
|
||||
the file normally. But if is_active() reports that the log is hot, this
|
||||
may change between the test and the consequence of the test. So we may
|
||||
open the I/O cache whereas the log is now cold, which is nonsense.
|
||||
To guard against this, we need to have LOCK_log.
|
||||
*/
|
||||
|
||||
DBUG_PRINT("info",("hot_log: %d",hot_log));
|
||||
if (!hot_log) /* if hot_log, we already have this mutex */
|
||||
pthread_mutex_lock(log_lock);
|
||||
if (rli->relay_log.is_active(rli->linfo.log_file_name))
|
||||
{
|
||||
#ifdef EXTRA_DEBUG
|
||||
|
@ -3511,15 +3523,24 @@ rli->relay_log_pos=%s rli->pending=%lu",
|
|||
|
||||
/*
|
||||
Read pointer has to be at the start since we are the only
|
||||
reader
|
||||
reader.
|
||||
We must keep the LOCK_log to read the 4 first bytes, as this is a hot
|
||||
log (same as when we call read_log_event() above: for a hot log we
|
||||
take the mutex).
|
||||
*/
|
||||
if (check_binlog_magic(cur_log,&errmsg))
|
||||
{
|
||||
if (!hot_log) pthread_mutex_unlock(log_lock);
|
||||
goto err;
|
||||
}
|
||||
if (!hot_log) pthread_mutex_unlock(log_lock);
|
||||
continue;
|
||||
}
|
||||
if (!hot_log) pthread_mutex_unlock(log_lock);
|
||||
/*
|
||||
if we get here, the log was not hot, so we will have to
|
||||
open it ourselves
|
||||
if we get here, the log was not hot, so we will have to open it
|
||||
ourselves. We are sure that the log is still not hot now (a log can get
|
||||
from hot to cold, but not from cold to hot). No need for LOCK_log.
|
||||
*/
|
||||
#ifdef EXTRA_DEBUG
|
||||
sql_print_error("next log '%s' is not active",
|
||||
|
|
Loading…
Reference in a new issue