diff options
author | unknown <jani@a193-229-222-105.elisa-laajakaista.fi> | 2006-06-21 23:54:06 +0300 |
---|---|---|
committer | unknown <jani@a193-229-222-105.elisa-laajakaista.fi> | 2006-06-21 23:54:06 +0300 |
commit | 41b9884db0db0b3e16562161a86e94a998bcce2d (patch) | |
tree | 26c59fd3ce3e6a0d08c7c19d6dd652e86721e1af /sql | |
parent | 7b2a3d50cbc4ae77f23d73b78b4fca853a734932 (diff) | |
parent | 37511b3be3485748c56461ff95b600103c45ec6b (diff) | |
download | mariadb-git-41b9884db0db0b3e16562161a86e94a998bcce2d.tar.gz |
Merge jamppa@bk-internal.mysql.com:/home/bk/mysql-5.0
into a193-229-222-105.elisa-laajakaista.fi:/home/jani/mysql-5.0
Diffstat (limited to 'sql')
-rw-r--r-- | sql/slave.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sql/slave.cc b/sql/slave.cc index caeefc1ad3c..2b31d722f26 100644 --- a/sql/slave.cc +++ b/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; } |