1
0
mirror of https://github.com/golang/go synced 2024-11-18 00:54:45 -07:00

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/16815
Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
Austin Clements 2015-11-10 15:24:59 -05:00
parent f5c42cf88e
commit f32f2954fb

View File

@ -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
}