diff --git a/sql-common/client.c b/sql-common/client.c index 68878df50e8..dc0889a3ba8 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -133,6 +133,11 @@ 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 a timeout value, in seconds, that we should wait until we @@ -818,6 +823,12 @@ 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 7fb7fbdade4..51421533a5b 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -4383,4 +4383,26 @@ template class I_List_iterator; template class I_List_iterator; #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 */