mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Automated rollback of changelist 525849045
PiperOrigin-RevId: 526120544
This commit is contained in:
committed by
gVisor bot
parent
751906f40d
commit
e9b8e1b74c
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user