From a42573c2f1d6a806439ec0cf65ace0508a37747f Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 27 Jun 2022 13:58:55 -0400 Subject: [PATCH] net: avoid darwin/arm64 platform bug in TestCloseWrite 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 #49352 (we hope). Updates #37795. Change-Id: I4052aec21d311d7370550aea9dd7941f39141133 Reviewed-on: https://go-review.googlesource.com/c/go/+/414534 Run-TryBot: Bryan Mills Auto-Submit: Bryan Mills Reviewed-by: Damien Neil TryBot-Result: Gopher Robot --- src/net/net_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/net/net_test.go b/src/net/net_test.go index 29a2c5d4baa23..c297c51fb9ea6 100644 --- a/src/net/net_test.go +++ b/src/net/net_test.go @@ -97,6 +97,17 @@ func TestCloseWrite(t *testing.T) { t.Error(err) return } + + // Workaround for https://go.dev/issue/49352. + // 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) + } + if !deadline.IsZero() { c.SetDeadline(deadline) }