]> Cypherpunks repositories - gostls13.git/commitdiff
net: avoid windows hang in TestCloseWrite
authorqmuntal <quimmuntal@gmail.com>
Tue, 13 May 2025 12:28:01 +0000 (14:28 +0200)
committerGopher Robot <gobot@golang.org>
Thu, 15 May 2025 14:44:10 +0000 (07:44 -0700)
On Windows, reading from a socket at the same time as the other
end is closing it will occasionally hang. This is a Windows issue, not
a Go issue, similar to what happens in macOS (see #49352).

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

Fixes #73140.

Change-Id: I24e457a577e507d0d69924af6ffa1aa24c4aaaa6
Reviewed-on: https://go-review.googlesource.com/c/go/+/671457
Reviewed-by: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Alan Donovan <adonovan@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
Commit-Queue: Alan Donovan <adonovan@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
src/net/net_test.go

index bca6c99074bc8d512033c793c697908695f713fc..7269db8f2be0fe6ed668f105b44d195d6f456209 100644 (file)
@@ -98,12 +98,12 @@ func TestCloseWrite(t *testing.T) {
                                }
 
                                // Workaround for https://go.dev/issue/49352.
-                               // On arm64 macOS (current as of macOS 12.4),
+                               // On Windows and 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" {
+                               if runtime.GOOS == "windows" || (runtime.GOOS == "darwin" && runtime.GOARCH == "arm64") {
                                        time.Sleep(10 * time.Millisecond)
                                }