aboutsummaryrefslogtreecommitdiff
path: root/src/sync
diff options
context:
space:
mode:
authorMichael Anthony Knyszek <mknyszek@google.com>2025-05-16 04:42:38 +0000
committerMichael Knyszek <mknyszek@google.com>2025-05-16 09:55:03 -0700
commite6cd9c083ec1a2d989608fd6b4d4809b8b08d0fe (patch)
treea8384412e87a85579d734f92d2048d2f2a2165fb /src/sync
parent2b3794e3e8a0ecf9d0ff7d8689ca9cdaea974e08 (diff)
downloadgo-e6cd9c083ec1a2d989608fd6b4d4809b8b08d0fe.tar.xz
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 <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Pratt <mpratt@google.com>
Diffstat (limited to 'src/sync')
-rw-r--r--src/sync/pool_test.go12
1 files changed, 12 insertions, 0 deletions
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++ {