summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrburnett@build.mysql.com <>2004-08-23 18:55:12 +0200
committerrburnett@build.mysql.com <>2004-08-23 18:55:12 +0200
commit680aa3d69dd9ca564f519aa545f3c24bf31ae4f7 (patch)
treec5bf711b1c67e73106654dc6c6d3205446f52a49
parent3bd71971d690648ce25c404d5d4a9da5ec70f453 (diff)
downloadmariadb-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.c10
-rw-r--r--sql/slave.cc27
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 */