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>
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)