Commit 1322371f authored by sven@riska.(none)'s avatar sven@riska.(none)
Browse files

BUG#31024: STOP SLAVE does not stop attempted connect()s

Problem: if the IO slave thread is attempting to connect,
STOP SLAVE waits for the attempt to finish. 
It may take a long time.
Fix: don't wait, stop the slave immediately.
parent 8a4c6521
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -699,7 +699,20 @@ int terminate_slave_thread(THD* thd, pthread_mutex_t* term_lock,
  while (*slave_running)			// Should always be true
  {
    DBUG_PRINT("loop", ("killing slave thread"));
    KICK_SLAVE(thd);

    pthread_mutex_lock(&thd->LOCK_delete);
#ifndef DONT_USE_THR_ALARM
    /*
      Error codes from pthread_kill are:
      EINVAL: invalid signal number (can't happen)
      ESRCH: thread already killed (can happen, should be ignored)
    */
    IF_DBUG(int err= ) pthread_kill(thd->real_id, thr_client_alarm);
    DBUG_ASSERT(err != EINVAL);
#endif
    thd->awake(THD::NOT_KILLED);
    pthread_mutex_unlock(&thd->LOCK_delete);

    /*
      There is a small chance that slave thread might miss the first
      alarm. To protect againts it, resend the signal until it reacts
+0 −6
Original line number Diff line number Diff line
@@ -35,12 +35,6 @@ extern I_List<i_string> binlog_do_db, binlog_ignore_db;
extern int max_binlog_dump_events;
extern my_bool opt_sporadic_binlog_dump_fail;

#define KICK_SLAVE(thd) do {                                            \
                          pthread_mutex_lock(&(thd)->LOCK_delete);      \
                          (thd)->awake(THD::NOT_KILLED);                \
                          pthread_mutex_unlock(&(thd)->LOCK_delete);    \
                        } while(0)

int start_slave(THD* thd, MASTER_INFO* mi, bool net_report);
int stop_slave(THD* thd, MASTER_INFO* mi, bool net_report);
bool change_master(THD* thd, MASTER_INFO* mi);