aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2024-01-22 18:02:38 -0500
committerGopher Robot <gobot@golang.org>2024-01-23 17:05:09 +0000
commitf75e1c1460a009ee3feb9fbd34fc17b957644dc5 (patch)
tree8d9208caf08f91ae8206c12c041cdf1dc5a5deb0
parentd0dc93c8e1a5be4e0a44b7f8ecb0cb1417de50ce (diff)
downloadgo-f75e1c1460a009ee3feb9fbd34fc17b957644dc5.tar.xz
net: report timeouts more aggressively in Accept in the fake implementation
This ensures that if the listener has already timed out when Accept is called, Accept always returns an error instead of instantaneously accepting a connection that was already pending. For #17948. Change-Id: Iabef7121590df3dcc2fe428429d7c2bc2bcb6cd5 Reviewed-on: https://go-review.googlesource.com/c/go/+/557438 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: Damien Neil <dneil@google.com>
-rw-r--r--src/net/net_fake.go15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/net/net_fake.go b/src/net/net_fake.go
index 60b52b79fd..b7ecb39144 100644
--- a/src/net/net_fake.go
+++ b/src/net/net_fake.go
@@ -325,14 +325,27 @@ func (ffd *fakeNetFD) accept(laddr Addr) (*netFD, error) {
incoming []*netFD
ok bool
)
+ expired := ffd.readDeadline.Load().expired
select {
- case <-ffd.readDeadline.Load().expired:
+ case <-expired:
return nil, os.ErrDeadlineExceeded
case incoming, ok = <-ffd.incoming:
if !ok {
return nil, ErrClosed
}
+ select {
+ case <-expired:
+ ffd.incoming <- incoming
+ return nil, os.ErrDeadlineExceeded
+ default:
+ }
case incoming, ok = <-ffd.incomingFull:
+ select {
+ case <-expired:
+ ffd.incomingFull <- incoming
+ return nil, os.ErrDeadlineExceeded
+ default:
+ }
}
peer := incoming[0]