diff options
| author | Bryan C. Mills <bcmills@google.com> | 2024-01-22 18:02:38 -0500 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2024-01-23 17:05:09 +0000 |
| commit | f75e1c1460a009ee3feb9fbd34fc17b957644dc5 (patch) | |
| tree | 8d9208caf08f91ae8206c12c041cdf1dc5a5deb0 | |
| parent | d0dc93c8e1a5be4e0a44b7f8ecb0cb1417de50ce (diff) | |
| download | go-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.go | 15 |
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] |
