mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
Revert "cmd/compile: allow all of the preamble to be preemptible"
This reverts commits3f3782feed(CL 648518)b386b62852(CL 668475) Fixes #73542 Change-Id: I218851c5c0b62700281feb0b3f82b6b9b97b910d Reviewed-on: https://go-review.googlesource.com/c/go/+/670055 Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
6729fbe93e
commit
fa2bb342d7
12 changed files with 127 additions and 59 deletions
|
|
@ -1075,29 +1075,6 @@ func newstack() {
|
|||
gopreempt_m(gp) // never return
|
||||
}
|
||||
|
||||
if stackguard0 == gp.stack.lo+stackGuard && gp.preemptRecent {
|
||||
// The case happens because of an interaction between synchronous
|
||||
// and asynchronous preemption. First, we set the cooperative
|
||||
// preemption signal (g.stackguard0 = stackPreempt), and as a
|
||||
// result the function fails the stack check and enters its
|
||||
// morestack path. If it gets suspended at that point, we might
|
||||
// give up waiting for it and send an async preempt. That async
|
||||
// preempt gets processed and clears the cooperative preemption
|
||||
// signal (g.stackguard0 = g.stack.lo+stackGuard) and resumes
|
||||
// the function. But even though the cooperative preemption
|
||||
// signal is cleared, we're already on the morestack path and
|
||||
// can't avoid calling morestack. See issue 35470.
|
||||
//
|
||||
// To avoid this problem, if we've been preempted recently,
|
||||
// clear the "preempted recently" flag and resume the G.
|
||||
// If we really did need more stack, the morestack check will
|
||||
// immediately fail and we'll get back here to try again (with
|
||||
// preemptRecent==false, so we don't take this case the
|
||||
// second time).
|
||||
gp.preemptRecent = false
|
||||
gogo(&gp.sched) // never return
|
||||
}
|
||||
|
||||
// Allocate a bigger segment and move the stack.
|
||||
oldsize := gp.stack.hi - gp.stack.lo
|
||||
newsize := oldsize * 2
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue