summaryrefslogtreecommitdiff
path: root/sql/rpl_rli.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/rpl_rli.cc')
-rw-r--r--sql/rpl_rli.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc
index b1e6da0ba8b..14b176f7388 100644
--- a/sql/rpl_rli.cc
+++ b/sql/rpl_rli.cc
@@ -126,10 +126,13 @@ int Relay_log_info::init(const char* info_fname)
char fname[FN_REFLEN+128];
const char* msg = 0;
int error = 0;
+ mysql_mutex_t *log_lock;
DBUG_ENTER("Relay_log_info::init");
if (inited) // Set if this function called
DBUG_RETURN(0);
+
+ log_lock= relay_log.get_log_lock();
fn_format(fname, info_fname, mysql_data_home, "", 4+32);
mysql_mutex_lock(&data_lock);
cur_log_fd = -1;
@@ -209,7 +212,6 @@ a file name for --relay-log-index option", opt_relaylog_index_name);
/* For multimaster, add connection name to relay log filenames */
char buf_relay_logname[FN_REFLEN], buf_relaylog_index_name_buff[FN_REFLEN];
char *buf_relaylog_index_name= opt_relaylog_index_name;
- mysql_mutex_t *log_lock;
create_logfile_name_with_suffix(buf_relay_logname,
sizeof(buf_relay_logname),
@@ -229,7 +231,6 @@ a file name for --relay-log-index option", opt_relaylog_index_name);
note, that if open() fails, we'll still have index file open
but a destructor will take care of that
*/
- log_lock= relay_log.get_log_lock();
mysql_mutex_lock(log_lock);
if (relay_log.open_index_file(buf_relaylog_index_name, ln, TRUE) ||
relay_log.open(ln, LOG_BIN, 0, 0, SEQ_READ_APPEND,
@@ -306,7 +307,9 @@ Failed to open the existing relay log info file '%s' (errno %d)",
if (info_fd >= 0)
mysql_file_close(info_fd, MYF(0));
info_fd= -1;
+ mysql_mutex_lock(log_lock);
relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT);
+ mysql_mutex_unlock(log_lock);
mysql_mutex_unlock(&data_lock);
DBUG_RETURN(1);
}
@@ -428,7 +431,9 @@ err:
if (info_fd >= 0)
mysql_file_close(info_fd, MYF(0));
info_fd= -1;
+ mysql_mutex_lock(log_lock);
relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT);
+ mysql_mutex_unlock(log_lock);
mysql_mutex_unlock(&data_lock);
DBUG_RETURN(1);
}