net: avoid darwin_arm64 bug in TestDialParallelSpuriousConnection

On darwin_arm64, reading from a socket at the same time as the other
end is closing it will occasionally hang for 60 seconds before
returning ECONNRESET. (This is a macOS issue, not a Go issue.)

Work around this condition by adding a brief sleep before the read.

Fixes #37795.

Change-Id: I63f92b91fb297cd66f89cdab707583afd50ab9c5
Reviewed-on: https://go-review.googlesource.com/c/go/+/411155
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
This commit is contained in:
Damien Neil 2022-06-08 11:53:22 -07:00
parent 9228d7d7d5
commit 2c52465cb3

View file

@ -405,6 +405,16 @@ func TestDialParallelSpuriousConnection(t *testing.T) {
t.Fatal(err)
}
// Workaround for https://go.dev/issue/37795.
// On arm64 macOS (current as of macOS 12.4),
// reading from a socket at the same time as the client
// is closing it occasionally hangs for 60 seconds before
// returning ECONNRESET. Sleep for a bit to give the
// socket time to close before trying to read from it.
if runtime.GOOS == "darwin" && runtime.GOARCH == "arm64" {
time.Sleep(10 * time.Millisecond)
}
// The client should close itself, without sending data.
c.SetReadDeadline(readDeadline)
var b [1]byte