]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: remove misleading message during crash
authorDmitriy Vyukov <dvyukov@google.com>
Fri, 14 Feb 2014 09:24:48 +0000 (13:24 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Fri, 14 Feb 2014 09:24:48 +0000 (13:24 +0400)
The following checkdead message is false positive:

$ go test -race -c runtime
$ ./runtime.test -test.cpu=2 -test.run=TestSmhasherWindowed -test.v
=== RUN TestSmhasherWindowed-2
checkdead: find g 18 in status 1
SIGABRT: abort
PC=0x42bff1

LGTM=rsc
R=golang-codereviews, gobot, rsc
CC=golang-codereviews, iant, khr
https://golang.org/cl/59490046

src/pkg/runtime/proc.c

index 47cb30408375dba407771ea5dbc17e723d889870..b782d0fe1a0a30216cf70e9128760d4a722306a4 100644 (file)
@@ -2441,8 +2441,14 @@ checkdead(void)
        run = runtime·sched.mcount - runtime·sched.nmidle - runtime·sched.nmidlelocked - 1;
        if(run > 0)
                return;
+       // If we are dying because of a signal caught on an already idle thread,
+       // freezetheworld will cause all running threads to block.
+       // And runtime will essentially enter into deadlock state,
+       // except that there is a thread that will call runtime·exit soon.
+       if(runtime·panicking > 0)
+               return;
        if(run < 0) {
-               runtime·printf("checkdead: nmidle=%d nmidlelocked=%d mcount=%d\n",
+               runtime·printf("runtime: checkdead: nmidle=%d nmidlelocked=%d mcount=%d\n",
                        runtime·sched.nmidle, runtime·sched.nmidlelocked, runtime·sched.mcount);
                runtime·throw("checkdead: inconsistent counts");
        }
@@ -2457,7 +2463,7 @@ checkdead(void)
                        grunning++;
                else if(s == Grunnable || s == Grunning || s == Gsyscall) {
                        runtime·unlock(&allglock);
-                       runtime·printf("checkdead: find g %D in status %d\n", gp->goid, s);
+                       runtime·printf("runtime: checkdead: find g %D in status %d\n", gp->goid, s);
                        runtime·throw("checkdead: runnable g");
                }
        }