mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Bug#19437 (Connection refused by server: "2002 Can't connect... /master.sock"):
Clearing active VIO before calling mysql_close() in the slave I/O thread. sql/slave.cc: Clearing active VIO before calling mysql_close() in the slave I/O thread.
This commit is contained in:
parent
3435f614c2
commit
dad508ea1a
1 changed files with 20 additions and 0 deletions
20
sql/slave.cc
20
sql/slave.cc
|
@ -1653,6 +1653,15 @@ int fetch_master_table(THD *thd, const char *db_name, const char *table_name,
|
|||
if (connect_to_master(thd, mysql, mi))
|
||||
{
|
||||
my_error(ER_CONNECT_TO_MASTER, MYF(0), mysql_error(mysql));
|
||||
/*
|
||||
We need to clear the active VIO since, theoretically, somebody
|
||||
might issue an awake() on this thread. If we are then in the
|
||||
middle of closing and destroying the VIO inside the
|
||||
mysql_close(), we will have a problem.
|
||||
*/
|
||||
#ifdef SIGNAL_WITH_VIO_CLOSE
|
||||
thd->clear_active_vio();
|
||||
#endif
|
||||
mysql_close(mysql);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
@ -3709,6 +3718,17 @@ err:
|
|||
VOID(pthread_mutex_unlock(&LOCK_thread_count));
|
||||
if (mysql)
|
||||
{
|
||||
/*
|
||||
Here we need to clear the active VIO before closing the
|
||||
connection with the master. The reason is that THD::awake()
|
||||
might be called from terminate_slave_thread() because somebody
|
||||
issued a STOP SLAVE. If that happends, the close_active_vio()
|
||||
can be called in the middle of closing the VIO associated with
|
||||
the 'mysql' object, causing a crash.
|
||||
*/
|
||||
#ifdef SIGNAL_WITH_VIO_CLOSE
|
||||
thd->clear_active_vio();
|
||||
#endif
|
||||
mysql_close(mysql);
|
||||
mi->mysql=0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue