]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: fix a race in TestResponseControllerSetPastReadDeadline
authorBryan C. Mills <bcmills@google.com>
Fri, 7 Apr 2023 15:37:18 +0000 (15:37 +0000)
committerGopher Robot <gobot@golang.org>
Fri, 7 Apr 2023 16:45:25 +0000 (16:45 +0000)
If the Write goroutine is delayed for long enough after its first
Write, the handler may have closed both the readc and donec channels
by the time it selects over them, and the donec case may be randomly
chosen. Handle that case by explicitly checking readc as well.

This fixes a race accidentally introduced in CL 482935 and observed in
https://build.golang.org/log/fa684750994d1fda409722f144b90c65b4c52cf9.

For #59447.

Change-Id: I5c87a599910cf8c1d037e5bbce68bf35afd55d61
Reviewed-on: https://go-review.googlesource.com/c/go/+/483036
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>

src/net/http/responsecontroller_test.go

index c560e4bc544d7b084eff17986c9d30c206c73d4c..5828f3795a52892666f11217eef5f78bae71c702 100644 (file)
@@ -199,8 +199,12 @@ func testResponseControllerSetPastReadDeadline(t *testing.T, mode testMode) {
                select {
                case <-readc:
                case <-donec:
-                       t.Errorf("server handler unexpectedly exited without closing readc")
-                       return
+                       select {
+                       case <-readc:
+                       default:
+                               t.Errorf("server handler unexpectedly exited without closing readc")
+                               return
+                       }
                }
                pw.Write([]byte("two"))
        }()