]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: never allocate new M when jumping time forward
authorAustin Clements <austin@google.com>
Tue, 10 Nov 2015 20:24:59 +0000 (15:24 -0500)
committerAustin Clements <austin@google.com>
Wed, 11 Nov 2015 17:37:42 +0000 (17:37 +0000)
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>
src/runtime/proc.go

index 4dba0cabe9a0bccba59b8bc012b6e1bb195d6069..94443b53c268c2eb92a91ef9f2dd6ecc1668dbb9 100644 (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
        }