aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2013-11-01 11:21:54 +1100
committerAndrew Gerrand <adg@golang.org>2013-11-01 11:21:54 +1100
commit038ff9dca156c92527167dd15f6da918b6f91648 (patch)
tree4cbba7e75e39d104009661f1892adbeeef402980
parent724d28a03d24aa404b7a6e83972e52b6732bbe17 (diff)
downloadgo-038ff9dca156c92527167dd15f6da918b6f91648.tar.gz
go-038ff9dca156c92527167dd15f6da918b6f91648.zip
[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
-rw-r--r--src/pkg/runtime/stack.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/pkg/runtime/stack.c b/src/pkg/runtime/stack.c
index 011c616bac..634706051c 100644
--- a/src/pkg/runtime/stack.c
+++ b/src/pkg/runtime/stack.c
@@ -255,7 +255,7 @@ runtime·newstack(void)
if(gp->stackguard0 == (uintptr)StackPreempt) {
if(gp == m->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");
if(oldstatus == Gsyscall && m->locks == 0)
runtime·throw("runtime: stack split during syscall");