summaryrefslogtreecommitdiff
path: root/sql/mysqld.cc
diff options
context:
space:
mode:
authorTatjana Azundris Nuernberg <tatjana.nuernberg@oracle.com>2012-02-17 19:02:17 +0000
committerTatjana Azundris Nuernberg <tatjana.nuernberg@oracle.com>2012-02-17 19:02:17 +0000
commitda2cc0cdf6ea9b1e689f41307ec118cf05579fc7 (patch)
treeb79a216e0f89da10e47a28ebeda751d7714a878b /sql/mysqld.cc
parentad72fff9b0efcd772be1fed6fde5e8e357a5f58e (diff)
downloadmariadb-git-da2cc0cdf6ea9b1e689f41307ec118cf05579fc7.tar.gz
BUG#13431369 - MAIN.VARIABLES-NOTEMBEDDED CRASHES THE SERVER SPORADICALLY ON WINDOWS
On shutdown(), Windows can drop traffic still queued for sending even if that wasn't specifically requested. As a result, fatal errors (those after signaling which the server will drop the connection) were sometimes only seen as "connection lost" on the client side, because the server-side shutdown() erraneously discarded the correct error message before sending it. If on Windows, we now use the Windows API to access the (non-broken) equivalent of shutdown(). Backport from trunk
Diffstat (limited to 'sql/mysqld.cc')
-rw-r--r--sql/mysqld.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index c47d39721b9..a37479dc4b4 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -932,7 +932,7 @@ static void close_connections(void)
{
if (ip_sock != INVALID_SOCKET)
{
- (void) shutdown(ip_sock, SHUT_RDWR);
+ (void) mysql_socket_shutdown(ip_sock, SHUT_RDWR);
(void) closesocket(ip_sock);
ip_sock= INVALID_SOCKET;
}
@@ -964,7 +964,7 @@ static void close_connections(void)
#ifdef HAVE_SYS_UN_H
if (unix_sock != INVALID_SOCKET)
{
- (void) shutdown(unix_sock, SHUT_RDWR);
+ (void) mysql_socket_shutdown(unix_sock, SHUT_RDWR);
(void) closesocket(unix_sock);
(void) unlink(mysqld_unix_port);
unix_sock= INVALID_SOCKET;
@@ -1069,7 +1069,7 @@ static void close_server_sock()
{
ip_sock=INVALID_SOCKET;
DBUG_PRINT("info",("calling shutdown on TCP/IP socket"));
- VOID(shutdown(tmp_sock, SHUT_RDWR));
+ VOID(mysql_socket_shutdown(tmp_sock, SHUT_RDWR));
#if defined(__NETWARE__)
/*
The following code is disabled for normal systems as it causes MySQL
@@ -1084,7 +1084,7 @@ static void close_server_sock()
{
unix_sock=INVALID_SOCKET;
DBUG_PRINT("info",("calling shutdown on unix socket"));
- VOID(shutdown(tmp_sock, SHUT_RDWR));
+ VOID(mysql_socket_shutdown(tmp_sock, SHUT_RDWR));
#if defined(__NETWARE__)
/*
The following code is disabled for normal systems as it may cause MySQL
@@ -5091,7 +5091,7 @@ pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused)))
if (req.sink)
((void (*)(int))req.sink)(req.fd);
- (void) shutdown(new_sock, SHUT_RDWR);
+ (void) mysql_socket_shutdown(new_sock, SHUT_RDWR);
(void) closesocket(new_sock);
continue;
}
@@ -5106,7 +5106,7 @@ pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused)))
if (getsockname(new_sock,&dummy, &dummyLen) < 0)
{
sql_perror("Error on new connection socket");
- (void) shutdown(new_sock, SHUT_RDWR);
+ (void) mysql_socket_shutdown(new_sock, SHUT_RDWR);
(void) closesocket(new_sock);
continue;
}
@@ -5118,7 +5118,7 @@ pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused)))
if (!(thd= new THD))
{
- (void) shutdown(new_sock, SHUT_RDWR);
+ (void) mysql_socket_shutdown(new_sock, SHUT_RDWR);
VOID(closesocket(new_sock));
continue;
}
@@ -5137,7 +5137,7 @@ pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused)))
vio_delete(vio_tmp);
else
{
- (void) shutdown(new_sock, SHUT_RDWR);
+ (void) mysql_socket_shutdown(new_sock, SHUT_RDWR);
(void) closesocket(new_sock);
}
delete thd;