diff options
author | rburnett@build.mysql.com <> | 2004-08-23 18:55:12 +0200 |
---|---|---|
committer | rburnett@build.mysql.com <> | 2004-08-23 18:55:12 +0200 |
commit | 680aa3d69dd9ca564f519aa545f3c24bf31ae4f7 (patch) | |
tree | c5bf711b1c67e73106654dc6c6d3205446f52a49 | |
parent | 3bd71971d690648ce25c404d5d4a9da5ec70f453 (diff) | |
download | mariadb-git-680aa3d69dd9ca564f519aa545f3c24bf31ae4f7.tar.gz |
Bug #4629 Crash after SLAVE STOP, if the IO thread is in special state.
client.c:
Removed call to clear_slave_vio in end_server(). Removed header declaration of clear_slave_vio
slave.cc:
Removed clear_slave_vio function and added calls to thd->clear_active_vio before each call to end_server()
-rw-r--r-- | sql-common/client.c | 10 | ||||
-rw-r--r-- | sql/slave.cc | 27 |
2 files changed, 6 insertions, 31 deletions
diff --git a/sql-common/client.c b/sql-common/client.c index dc0889a3ba8..1941e6bc517 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -133,10 +133,6 @@ static void mysql_close_free(MYSQL *mysql); static int wait_for_data(my_socket fd, uint timeout); #endif -#if defined(__WIN__) && defined(HAVE_REPLICATION) && defined(MYSQL_SERVER) -void clear_slave_vio( MYSQL* mysql ); -#endif - /**************************************************************************** A modified version of connect(). my_connect() allows you to specify @@ -823,12 +819,6 @@ void end_server(MYSQL *mysql) init_sigpipe_variables DBUG_PRINT("info",("Net: %s", vio_description(mysql->net.vio))); set_sigpipe(mysql); - -#if defined(__WIN__) && defined(HAVE_REPLICATION) && defined(MYSQL_SERVER) - /* if this mysql is one of our connections to the master, then clear it */ - clear_slave_vio( mysql ); -#endif - vio_delete(mysql->net.vio); reset_sigpipe(mysql); mysql->net.vio= 0; /* Marker */ diff --git a/sql/slave.cc b/sql/slave.cc index 51421533a5b..cb37a798037 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -3056,6 +3056,9 @@ dump"); } thd->proc_info= "Waiting to reconnect after a failed binlog dump request"; +#ifdef SIGNAL_WITH_VIO_CLOSE + thd->clear_active_vio(); +#endif end_server(mysql); /* First time retry immediately, assuming that we can recover @@ -3129,6 +3132,9 @@ max_allowed_packet", goto err; } thd->proc_info = "Waiting to reconnect after a failed master event read"; +#ifdef SIGNAL_WITH_VIO_CLOSE + thd->clear_active_vio(); +#endif end_server(mysql); if (retry_count++) { @@ -4384,25 +4390,4 @@ template class I_List_iterator<i_string_pair>; #endif -#ifdef __WIN__ -extern "C" void clear_slave_vio( MYSQL* mysql ) -{ - if (active_mi->mysql == mysql) - active_mi->io_thd->clear_active_vio(); - /* TODO: use code like below when multi-master is in place */ - /* LIST *cur = &master_list; - if (((MASTER_INFO*)cur->data)->mysql == mysql) - { - MASTER_INFO *mi = (MASTER_INFO*)cur->data; - mi->io_thd->clear_active_vio(); - return; - } - else - cur = cur->next;*/ -} -#endif - - - - #endif /* HAVE_REPLICATION */ |