]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix crash when returning from syscall during gc
authorHector Chu <hectorchu@gmail.com>
Tue, 11 Oct 2011 16:57:16 +0000 (12:57 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 11 Oct 2011 16:57:16 +0000 (12:57 -0400)
gp->m can go from non-nil to nil when it re-enters schedule().

R=golang-dev
CC=golang-dev, rsc
https://golang.org/cl/5245042

src/pkg/runtime/mgc0.c

index 797d011064bf4152bb9ba72cd2a979aaf2035320..6f7e2459d9d6c791fca64a91daf4a0898aa128bd 100644 (file)
@@ -597,6 +597,7 @@ handoff(Workbuf *b)
 static void
 scanstack(void (*scanblock)(byte*, int64), G *gp)
 {
+       M *mp;
        int32 n;
        Stktop *stk;
        byte *sp, *guard;
@@ -607,8 +608,8 @@ scanstack(void (*scanblock)(byte*, int64), G *gp)
        if(gp == g) {
                // Scanning our own stack: start at &gp.
                sp = (byte*)&gp;
-       } else if(gp->m != nil && gp->m->helpgc) {
-               // Gc helper scans its own stack.
+       } else if((mp = gp->m) != nil && mp->helpgc) {
+               // gchelper's stack is in active use and has no interesting pointers.
                return;
        } else {
                // Scanning another goroutine's stack.