Automated rollback of changelist 525849045

PiperOrigin-RevId: 526120544
This commit is contained in:
Nicolas Lacasse
2023-04-21 13:26:08 -07:00
committed by gVisor bot
parent 751906f40d
commit e9b8e1b74c
5 changed files with 15 additions and 35 deletions
+3 -13
View File
@@ -384,7 +384,7 @@ func (s *Socket) Accept(t *kernel.Task, peerRequested bool, flags int, blocking
}
} else {
var e waiter.Entry
e, ch = waiter.NewChannelEntry(waiter.ReadableEvents | waiter.EventHUp | waiter.EventErr)
e, ch = waiter.NewChannelEntry(waiter.ReadableEvents)
s.EventRegister(&e)
defer s.EventUnregister(&e)
}
@@ -540,21 +540,11 @@ func (s *Socket) RecvMsg(t *kernel.Task, dst usermem.IOSequence, flags int, have
}
} else {
var e waiter.Entry
e, ch = waiter.NewChannelEntry(waiter.ReadableEvents | waiter.EventRdHUp | waiter.EventHUp | waiter.EventErr)
e, ch = waiter.NewChannelEntry(waiter.ReadableEvents)
s.EventRegister(&e)
defer s.EventUnregister(&e)
}
n, err = copyToDst()
// If we got an RDHUP event, there's no use trying to
// read again since the socket has been shutdown.
if s.Readiness(waiter.EventRdHUp)&waiter.EventRdHUp > 0 {
// Don't return the EWOULDBLOCK.
if linuxerr.Equals(linuxerr.ErrWouldBlock, err) {
err = nil
}
break
}
}
}
if err != nil {
@@ -753,7 +743,7 @@ func (s *Socket) SendMsg(t *kernel.Task, src usermem.IOSequence, to []byte, flag
}
} else {
var e waiter.Entry
e, ch = waiter.NewChannelEntry(waiter.WritableEvents | waiter.EventHUp | waiter.EventErr)
e, ch = waiter.NewChannelEntry(waiter.WritableEvents)
s.EventRegister(&e)
defer s.EventUnregister(&e)
}
+1 -2
View File
@@ -75,9 +75,8 @@ const (
EventRdNorm EventMask = 0x0040 // POLLRDNORM
EventWrNorm EventMask = 0x0100 // POLLWRNORM
EventInternal EventMask = 0x1000
EventRdHUp EventMask = 0x2000 // POLLRDHUP
allEvents EventMask = 0x1f | EventRdNorm | EventWrNorm | EventRdHUp
allEvents EventMask = 0x1f | EventRdNorm | EventWrNorm
ReadableEvents EventMask = EventIn | EventRdNorm
WritableEvents EventMask = EventOut | EventWrNorm
)
-1
View File
@@ -742,7 +742,6 @@ syscall_test(
syscall_test(
size = "large",
add_hostinet = True,
shard_count = most_shards,
test = "//test/syscalls/linux:socket_inet_loopback_test",
)
+3 -13
View File
@@ -498,8 +498,7 @@ TEST_P(SocketInetLoopbackTest, TCPInfoState) {
int n = poll(&pfd, 1, kTimeout);
ASSERT_GE(n, 0) << strerror(errno);
ASSERT_EQ(n, 1);
if (IsRunningOnGvisor() && !IsRunningWithHostinet() &&
GvisorPlatform() != Platform::kFuchsia) {
if (IsRunningOnGvisor() && GvisorPlatform() != Platform::kFuchsia) {
// TODO(gvisor.dev/issue/6015): Notify POLLRDHUP on incoming FIN.
ASSERT_EQ(pfd.revents, POLLIN);
} else {
@@ -650,17 +649,9 @@ void TestListenHangupConnectingRead(const SocketInetTestParam& param,
hangup(listen_fd);
int connecting_client_error = ECONNREFUSED;
if (IsRunningWithHostinet()) {
// TODO(b/267210840): For some reason the connecting client gets
// ECONNRESET on hostinet. Maybe the intervening poll() implementation
// changes the socket state somehow?
connecting_client_error = ECONNRESET;
}
std::array<std::pair<int, int>, 2> sockets = {
std::make_pair(established_client.get(), ECONNRESET),
std::make_pair(connecting_client.get(), connecting_client_error),
std::make_pair(connecting_client.get(), ECONNREFUSED),
};
for (size_t i = 0; i < sockets.size(); i++) {
SCOPED_TRACE(absl::StrCat("i=", i));
@@ -750,8 +741,7 @@ TEST_P(SocketInetLoopbackTest, TCPNonBlockingConnectClose) {
ASSERT_GE(n, 0) << strerror(errno);
ASSERT_EQ(n, 1);
if (IsRunningOnGvisor() && !IsRunningWithHostinet() &&
GvisorPlatform() != Platform::kFuchsia) {
if (IsRunningOnGvisor() && GvisorPlatform() != Platform::kFuchsia) {
// TODO(gvisor.dev/issue/6015): Notify POLLRDHUP on incoming FIN.
ASSERT_EQ(pfd.revents, POLLIN);
} else {
+8 -6
View File
@@ -2488,16 +2488,18 @@ TEST_P(SimpleTcpSocketTest, SynRcvdOnListenerShutdown) {
POLLOUT
#else
[]() {
const int expected_revents = POLLIN | POLLOUT | POLLHUP |
POLLRDNORM | POLLWRNORM |
POLLRDHUP;
const int expected_revents =
POLLIN | POLLOUT | POLLHUP | POLLRDNORM | POLLWRNORM;
// TODO(gvisor.dev/issue/6666): POLLERR is still present
// after getsockopt(..., SO_ERROR, ...) call (unless
// hostinet is used).
if (IsRunningWithHostinet()) {
return expected_revents;
if (IsRunningOnGvisor()) {
if (IsRunningWithHostinet()) {
return expected_revents;
}
return expected_revents | POLLPRI | POLLERR;
}
return expected_revents | POLLPRI | POLLERR;
return expected_revents | POLLRDHUP;
}()
#endif
);