Commit 84e2ab8c authored by unknown's avatar unknown
Browse files

Fix for the patch #13377. Avoids race condition for relay logs close.

Code that closes current relay log is moved to purge_relay_logs().

parent 19758ce6
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -582,6 +582,20 @@ int purge_relay_logs(RELAY_LOG_INFO* rli, THD *thd, bool just_reset,

  rli->slave_skip_counter=0;
  pthread_mutex_lock(&rli->data_lock);

  /* 
    we close the relay log fd possibly left open by the slave SQL thread, 
    to be able to delete it; the relay log fd possibly left open by the slave
    I/O thread will be closed naturally in reset_logs() by the 
    close(LOG_CLOSE_TO_BE_OPENED) call
  */
  if (rli->cur_log_fd >= 0)
  {
    end_io_cache(&rli->cache_buf);
    my_close(rli->cur_log_fd, MYF(MY_WME));
    rli->cur_log_fd= -1;
  }

  if (rli->relay_log.reset_logs(thd))
  {
    *errmsg = "Failed during log reset";
@@ -3692,14 +3706,6 @@ log space");
  mi->slave_running = 0;
  mi->io_thd = 0;

  /* Close log file and free buffers */
  if (mi->rli.cur_log_fd >= 0)
  {
    end_io_cache(&mi->rli.cache_buf);
    my_close(mi->rli.cur_log_fd, MYF(MY_WME));
    mi->rli.cur_log_fd= -1;
  }

  /* Forget the relay log's format */
  delete mi->rli.relay_log.description_event_for_queue;
  mi->rli.relay_log.description_event_for_queue= 0;
@@ -3916,14 +3922,6 @@ the slave SQL thread with \"SLAVE START\". We stopped at log \
  rli->cached_charset_invalidate();
  rli->save_temporary_tables = thd->temporary_tables;

  /* Close log file and free buffers if it's already open */
  if (rli->cur_log_fd >= 0)
  {
    end_io_cache(&rli->cache_buf);
    my_close(rli->cur_log_fd, MYF(MY_WME));
    rli->cur_log_fd = -1;
  }

  /*
    TODO: see if we can do this conditionally in next_event() instead
    to avoid unneeded position re-init