]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: usleep in TestWeakToStrongMarkTermination
authorMichael Anthony Knyszek <mknyszek@google.com>
Fri, 13 Dec 2024 23:18:59 +0000 (23:18 +0000)
committerMichael Knyszek <mknyszek@google.com>
Mon, 16 Dec 2024 16:57:31 +0000 (08:57 -0800)
There's a subtle bug in this test (big surprise): time.Sleep allocates,
so the time.Sleep(100*time.Millisecond) before unblocking gcMarkDone
might itself end up in gcMarkDone.

Work around this by using usleep here instead.

Fixes #70532.

Change-Id: I4c642ebb12f737cdb0d79ccff64b6059fc3d8b34
Reviewed-on: https://go-review.googlesource.com/c/go/+/636155
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/runtime/gc_test.go

index 35cb634936a91e1fa8bc304e3fb5e73c24a8bc63..00280ed1b53cab943e09af8db8442a80034fa59d 100644 (file)
@@ -834,7 +834,11 @@ func TestWeakToStrongMarkTermination(t *testing.T) {
                done <- struct{}{}
        }()
        go func() {
-               time.Sleep(100 * time.Millisecond)
+               // Usleep here instead of time.Sleep. time.Sleep
+               // can allocate, and if we get unlucky, then it
+               // can end up stuck in gcMarkDone with nothing to
+               // wake it.
+               runtime.Usleep(100000) // 100ms
 
                // Let mark termination continue.
                runtime.SetSpinInGCMarkDone(false)