diff options
author | unknown <jonas@perch.ndb.mysql.com> | 2006-09-04 13:43:34 +0200 |
---|---|---|
committer | unknown <jonas@perch.ndb.mysql.com> | 2006-09-04 13:43:34 +0200 |
commit | d2d605e4ea578cf49adb52ebd834363962d099d8 (patch) | |
tree | 2f11faf90e49ea4e1e47cec032231077bb5adbfd /sql/sql_repl.cc | |
parent | 5d82bec5b880a20d537b9c84b9353ae5607bac1d (diff) | |
download | mariadb-git-d2d605e4ea578cf49adb52ebd834363962d099d8.tar.gz |
bug#21965 - replication
fix deadlock if master switches log file in parallell with "show master logs"
sql/log.cc:
add raw_get_current_log which dont take log mutex
sql/sql_class.h:
add raw_get_current_log which dont take log mutex
sql/sql_repl.cc:
Fix lock order i.e first log_lock then index_lock
Diffstat (limited to 'sql/sql_repl.cc')
-rw-r--r-- | sql/sql_repl.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 963c4ccf5a6..2a7ab55b8c4 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -1359,10 +1359,14 @@ int show_binlogs(THD* thd) MYSQL_TYPE_LONGLONG)); if (protocol->send_fields(&field_list, 1)) DBUG_RETURN(1); + + pthread_mutex_lock(mysql_bin_log.get_log_lock()); mysql_bin_log.lock_index(); index_file=mysql_bin_log.get_index_file(); - - mysql_bin_log.get_current_log(&cur); + + mysql_bin_log.raw_get_current_log(&cur); // dont take mutex + pthread_mutex_unlock(mysql_bin_log.get_log_lock()); // lockdep, OK + cur_dir_len= dirname_length(cur.log_file_name); reinit_io_cache(index_file, READ_CACHE, (my_off_t) 0, 0, 0); |