From: Michael Anthony Knyszek Date: Fri, 16 May 2025 04:42:38 +0000 (+0000) Subject: sync: set GOMAXPROCS to 1 in TestPoolGC X-Git-Tag: go1.25rc1~247 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e6cd9c083ec1a2d989608fd6b4d4809b8b08d0fe;p=gostls13.git sync: set GOMAXPROCS to 1 in TestPoolGC This test expects to be able to drain a Pool using only Get. This isn't actually possible in the general case, since a pooled value could get stuck in some P's private slot. However, if GOMAXPROCS=1, there's only 1 P we could be running on, so getting stuck becomes impossible. This test isn't checking any concurrent properties of Pool, so this is fine. Just set GOMAXPROCS=1 for this one particular test. Fixes #73728. Change-Id: I9053e28118060650f2cd7d0d58f5a86d630b36f7 Reviewed-on: https://go-review.googlesource.com/c/go/+/673375 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- diff --git a/src/sync/pool_test.go b/src/sync/pool_test.go index 7f60ed7026..f0f0d3d40a 100644 --- a/src/sync/pool_test.go +++ b/src/sync/pool_test.go @@ -102,6 +102,18 @@ func TestPoolRelease(t *testing.T) { } func testPool(t *testing.T, drain bool) { + if drain { + // Run with GOMAXPROCS=1 if drain is set. The code below implicitly + // assumes it can remove all the pool-cached values with cleanups + // with Get, but this isn't necessarily true if a value gets stuck + // in the private slot for some P. This is especially likely when + // running with mayMoreStackPreempt. We can make this exact, however, + // by setting GOMAXPROCS to 1, so there's only 1 P. This is fine for + // this test, since we're not trying to check any concurrent properties + // of Pool anyway. + defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(1)) + } + var p Pool const N = 100 for try := 0; try < 3; try++ {