adb: increase the FD table size on Win32.
128 maximum FDs is a pretty low limit, which can easily be exhausted by port forwarding. Bump the maximum up to 2048, and add a test that checks whether we can actually use a few hundred sockets. Bug: https://code.google.com/p/android/issues/detail?id=12141 Bug: http://b/28246942 Change-Id: Ia4a2ff776e8e58ec13378756f19d80392679ece9
This commit is contained in:
parent
1607ea64cb
commit
b31e17107c
2 changed files with 30 additions and 1 deletions
|
@ -215,3 +215,32 @@ TEST_F(sysdeps_poll, disconnect) {
|
|||
// Linux returns POLLIN | POLLHUP, Windows returns just POLLHUP.
|
||||
EXPECT_EQ(POLLHUP, pfd.revents & POLLHUP);
|
||||
}
|
||||
|
||||
TEST_F(sysdeps_poll, fd_count) {
|
||||
// https://code.google.com/p/android/issues/detail?id=12141
|
||||
static constexpr int num_sockets = 512;
|
||||
std::vector<int> sockets;
|
||||
std::vector<adb_pollfd> pfds;
|
||||
sockets.resize(num_sockets * 2);
|
||||
for (int32_t i = 0; i < num_sockets; ++i) {
|
||||
ASSERT_EQ(0, adb_socketpair(&sockets[i * 2])) << strerror(errno);
|
||||
ASSERT_TRUE(WriteFdExactly(sockets[i * 2], &i, sizeof(i)));
|
||||
adb_pollfd pfd;
|
||||
pfd.events = POLLIN;
|
||||
pfd.fd = sockets[i * 2 + 1];
|
||||
pfds.push_back(pfd);
|
||||
}
|
||||
|
||||
ASSERT_EQ(num_sockets, adb_poll(pfds.data(), pfds.size(), 0));
|
||||
for (int i = 0; i < num_sockets; ++i) {
|
||||
ASSERT_NE(0, pfds[i].revents & POLLIN);
|
||||
|
||||
int32_t buf[2] = { -1, -1 };
|
||||
ASSERT_EQ(adb_read(pfds[i].fd, buf, sizeof(buf)), static_cast<ssize_t>(sizeof(int32_t)));
|
||||
ASSERT_EQ(i, buf[0]);
|
||||
}
|
||||
|
||||
for (int fd : sockets) {
|
||||
adb_close(fd);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -191,7 +191,7 @@ typedef struct FHRec_
|
|||
#define fh_socket u.socket
|
||||
|
||||
#define WIN32_FH_BASE 2048
|
||||
#define WIN32_MAX_FHS 128
|
||||
#define WIN32_MAX_FHS 2048
|
||||
|
||||
static adb_mutex_t _win32_lock;
|
||||
static FHRec _win32_fhs[ WIN32_MAX_FHS ];
|
||||
|
|
Loading…
Reference in a new issue