Commit 038ff9dc authored by Andrew Gerrand's avatar Andrew Gerrand

[release-branch.go1.2] runtime: relax preemption assertion during stack split

««« CL 18740044 / 1a8903f0a577
runtime: relax preemption assertion during stack split

The case can happen when starttheworld is calling acquirep
to get things moving again and acquirep gets preempted.
The stack trace is in golang.org/issue/6644.

It is difficult to build a short test case for this, but
the person who reported issue 6644 confirms that this
solves the problem.

Fixes #6644.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/18740044
»»»

R=golang-dev
CC=golang-dev
https://golang.org/cl/20460044
parent 724d28a0
...@@ -255,7 +255,7 @@ runtime·newstack(void) ...@@ -255,7 +255,7 @@ runtime·newstack(void)
if(gp->stackguard0 == (uintptr)StackPreempt) { if(gp->stackguard0 == (uintptr)StackPreempt) {
if(gp == m->g0) if(gp == m->g0)
runtime·throw("runtime: preempt g0"); runtime·throw("runtime: preempt g0");
if(oldstatus == Grunning && m->p == nil) if(oldstatus == Grunning && m->p == nil && m->locks == 0)
runtime·throw("runtime: g is running but p is not"); runtime·throw("runtime: g is running but p is not");
if(oldstatus == Gsyscall && m->locks == 0) if(oldstatus == Gsyscall && m->locks == 0)
runtime·throw("runtime: stack split during syscall"); runtime·throw("runtime: stack split during syscall");
......
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