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/10155
Reviewed-by: Russ Cox <rsc@golang.org>
writeheapdump_m(fd)
})
- getg().m.locks++ // TODO: Is this necessary?
startTheWorld()
- getg().m.locks--
}
const (
readmemstats_m(m)
})
- getg().m.locks++ // TODO: Is this necessary?
startTheWorld()
- getg().m.locks--
}
func readmemstats_m(stats *MemStats) {
// 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.