Loading sql/slave.cc +20 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -3709,6 +3718,17 @@ log space"); 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 Loading
sql/slave.cc +20 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -3709,6 +3718,17 @@ log space"); 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