Commit f32f2954 authored by Austin Clements's avatar Austin Clements

runtime: never allocate new M when jumping time forward

When we're jumping time forward, it means everyone is asleep, so there
should always be an M available. Furthermore, this causes both
allocation and write barriers in contexts that may be running without
a P (such as in sysmon).

Hence, replace this allocation with a throw.

Updates #10600.

Change-Id: I2cee70d5db828d0044082878995949edb25dda5f
Reviewed-on: https://go-review.googlesource.com/16815Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
parent f5c42cf8
......@@ -3274,11 +3274,12 @@ func checkdead() {
}
mp := mget()
if mp == nil {
newm(nil, _p_)
} else {
mp.nextp.set(_p_)
notewakeup(&mp.park)
// There should always be a free M since
// nothing is running.
throw("checkdead: no m for timer")
}
mp.nextp.set(_p_)
notewakeup(&mp.park)
return
}
......
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