Commit 9c44a41d authored by Austin Clements's avatar Austin Clements

runtime: disallow preemption during startTheWorld

Currently, startTheWorld clears preemptoff for the current M before
starting the world. A few callers increment m.locks around
startTheWorld, presumably to prevent preemption any time during
starting the world. This is almost certainly pointless (none of the
other callers do this), but there's no harm in making startTheWorld
keep preemption disabled until it's all done, which definitely lets us
drop these m.locks manipulations.

Change-Id: I8a93658abd0c72276c9bafa3d2c7848a65b4691a
Reviewed-on: https://go-review.googlesource.com/10155Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
parent a1da255a
......@@ -21,9 +21,7 @@ func runtime_debug_WriteHeapDump(fd uintptr) {
writeheapdump_m(fd)
})
getg().m.locks++ // TODO: Is this necessary?
startTheWorld()
getg().m.locks--
}
const (
......
......@@ -159,9 +159,7 @@ func ReadMemStats(m *MemStats) {
readmemstats_m(m)
})
getg().m.locks++ // TODO: Is this necessary?
startTheWorld()
getg().m.locks--
}
func readmemstats_m(stats *MemStats) {
......
......@@ -550,9 +550,9 @@ func stopTheWorld(reason string) {
// startTheWorld undoes the effects of stopTheWorld.
func startTheWorld() {
getg().m.preemptoff = ""
semrelease(&worldsema)
systemstack(startTheWorldWithSema)
getg().m.preemptoff = ""
}
// Holding worldsema grants an M the right to try to stop the world.
......
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