summaryrefslogtreecommitdiff
path: root/sql/mysqld.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/mysqld.cc')
-rw-r--r--sql/mysqld.cc49
1 files changed, 26 insertions, 23 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index d96be8f13f7..5407a0b491f 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1348,7 +1348,8 @@ static Buffered_logs buffered_logs;
struct my_rnd_struct sql_rand; ///< used by sql_class.cc:THD::THD()
#ifndef EMBEDDED_LIBRARY
-std::vector<MYSQL_SOCKET> listen_sockets;
+
+Dynamic_array<MYSQL_SOCKET> listen_sockets(PSI_INSTRUMENT_MEM, 0);
bool unix_sock_is_online= false;
/**
Error reporter that buffer log messages.
@@ -1690,14 +1691,14 @@ static void close_connections(void)
/* Abort listening to new connections */
DBUG_PRINT("quit",("Closing sockets"));
- for (std::vector<MYSQL_SOCKET>::iterator sock = listen_sockets.begin();
- sock != listen_sockets.end(); ++sock)
+ for (uint i= 0 ; i < listen_sockets.elements() ; i++)
{
+ MYSQL_SOCKET *sock= listen_sockets.get_pos(i);
(void) mysql_socket_close(*sock);
if (sock->is_unix_domain_socket)
(void) unlink(mysqld_unix_port);
}
- listen_sockets.clear();
+ listen_sockets.free_memory();
end_thr_alarm(0); // Abort old alarms.
@@ -1787,9 +1788,9 @@ static void close_server_sock()
#ifdef HAVE_CLOSE_SERVER_SOCK
DBUG_ENTER("close_server_sock");
- for (std::vector<MYSQL_SOCKET>::iterator sock= listen_sockets.begin();
- sock != listen_sockets.end(); ++sock)
+ for (uint i= 0 ; i < listen_sockets.elements() ; i++)
{
+ MYSQL_SOCKET *sock= listen_sockets.get_pos(i);
if (sock->is_unix_domain_socket)
{
close_socket(*sock, "unix/IP");
@@ -1800,7 +1801,7 @@ static void close_server_sock()
close_socket(*sock, "TCP/IP");
}
}
- listen_sockets.clear();
+ listen_sockets.free_memory();
DBUG_VOID_RETURN;
#endif
@@ -2236,7 +2237,7 @@ static void set_root(const char *path)
*/
static void activate_tcp_port(uint port,
- std::vector<MYSQL_SOCKET> *listen_sockets,
+ Dynamic_array<MYSQL_SOCKET> *sockets,
bool is_extra_port= false)
{
struct addrinfo *ai, *a;
@@ -2377,7 +2378,7 @@ static void activate_tcp_port(uint port,
(void) fcntl(mysql_socket_getfd(ip_sock), F_SETFD, FD_CLOEXEC);
#endif
ip_sock.is_extra_port= is_extra_port;
- listen_sockets->push_back(ip_sock);
+ sockets->push(ip_sock);
}
}
@@ -2443,7 +2444,7 @@ static void network_init(void)
}
unix_sock.is_unix_domain_socket= true;
- listen_sockets.push_back(unix_sock);
+ listen_sockets.push(unix_sock);
unix_sock_is_online= true;
mysql_socket_set_thread_owner(unix_sock);
@@ -5932,7 +5933,8 @@ void handle_connections_sockets()
struct sockaddr_storage cAddr;
int retval;
#ifdef HAVE_POLL
- std::vector<struct pollfd> fds; // for ip_sock, unix_sock and extra_ip_sock
+ // for ip_sock, unix_sock and extra_ip_sock
+ Dynamic_array<struct pollfd> fds(PSI_INSTRUMENT_MEM);
#else
fd_set readFDs,clientFDs;
#endif
@@ -5940,21 +5942,22 @@ void handle_connections_sockets()
DBUG_ENTER("handle_connections_sockets");
#ifdef HAVE_POLL
- fds.resize(listen_sockets.size());
for (size_t i= 0; i < listen_sockets.size(); i++)
{
- mysql_socket_set_thread_owner(listen_sockets[i]);
- fds[i].fd= mysql_socket_getfd(listen_sockets[i]);
- fds[i].events= POLLIN;
- set_non_blocking_if_supported(listen_sockets[i]);
+ struct pollfd local_fds;
+ mysql_socket_set_thread_owner(listen_sockets.at(i));
+ local_fds.fd= mysql_socket_getfd(listen_sockets.at(i));
+ local_fds.events= POLLIN;
+ fds.push(local_fds);
+ set_non_blocking_if_supported(listen_sockets.at(i));
}
#else
FD_ZERO(&clientFDs);
for (size_t i= 0; i < listen_sockets.size(); i++)
{
- int fd= mysql_socket_getfd(listen_sockets[i]);
+ int fd= mysql_socket_getfd(listen_sockets.at(i));
FD_SET(fd, &clientFDs);
- set_non_blocking_if_supported(listen_sockets[i]);
+ set_non_blocking_if_supported(listen_sockets.at(i));
}
#endif
@@ -5965,7 +5968,7 @@ void handle_connections_sockets()
while (!abort_loop)
{
#ifdef HAVE_POLL
- retval= poll(fds.data(), fds.size(), -1);
+ retval= poll(fds.get_pos(0), fds.size(), -1);
#else
readFDs=clientFDs;
retval= select(FD_SETSIZE, &readFDs, NULL, NULL, NULL);
@@ -5994,18 +5997,18 @@ void handle_connections_sockets()
#ifdef HAVE_POLL
for (size_t i= 0; i < fds.size(); ++i)
{
- if (fds[i].revents & POLLIN)
+ if (fds.at(i).revents & POLLIN)
{
- sock= listen_sockets[i];
+ sock= listen_sockets.at(i);
break;
}
}
#else // HAVE_POLL
for (size_t i=0; i < listen_sockets.size(); i++)
{
- if (FD_ISSET(mysql_socket_getfd(listen_sockets[i]), &readFDs))
+ if (FD_ISSET(mysql_socket_getfd(listen_sockets.at(i)), &readFDs))
{
- sock= listen_sockets[i];
+ sock= listen_sockets.at(i);
break;
}
}