Commit 98c5a56f authored by Ian Lance Taylor's avatar Ian Lance Taylor

runtime: account for callbacks in checkdead on Windows

When a callback runs on a different thread in Windows, as in the
runtime package test TestCallbackInAnotherThread, it will use the
extra M. That can cause the test in checkdead to fail incorrectly.
Check whether there actually is an extra M before expecting it.

I think this is a general problem unrelated to timers. I think the test
was passing previously because the timer goroutine was using an M.
But I haven't proved that. This change seems correct, and it avoids
the test failure when using the new timers on Windows.

Updates #27707

Change-Id: Ieb31c04ff0354d6fae7e173b59bcfadb8b0464cd
Reviewed-on: https://go-review.googlesource.com/c/go/+/174037Reviewed-by: default avatarKeith Randall <khr@golang.org>
parent ccbc9a3f
...@@ -4187,7 +4187,12 @@ func checkdead() { ...@@ -4187,7 +4187,12 @@ func checkdead() {
// for details.) // for details.)
var run0 int32 var run0 int32
if !iscgo && cgoHasExtraM { if !iscgo && cgoHasExtraM {
run0 = 1 mp := lockextra(true)
haveExtraM := extraMCount > 0
unlockextra(mp)
if haveExtraM {
run0 = 1
}
} }
run := mcount() - sched.nmidle - sched.nmidlelocked - sched.nmsys run := mcount() - sched.nmidle - sched.nmidlelocked - sched.nmsys
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment