]> Cypherpunks repositories - gostls13.git/commitdiff
undo CL 5844051 / 5d0322034aa8
authorMikio Hara <mikioh.mikioh@gmail.com>
Tue, 27 Mar 2012 04:05:17 +0000 (13:05 +0900)
committerRuss Cox <rsc@golang.org>
Tue, 27 Mar 2012 04:05:17 +0000 (13:05 +0900)
Breaks closure test when GOMAXPROCS=2 or more.

««« original CL description
runtime: restore deadlock detection in the simplest case.

Fixes #3342.

R=iant, r, dave, rsc
CC=golang-dev, remy
https://golang.org/cl/5844051

»»»

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

src/pkg/runtime/mheap.c
src/pkg/runtime/proc.c
test/fixedbugs/bug429.go [deleted file]
test/golden.out

index 9dd50835e79bbbf7570298979232a972f4e63db4..c877bfca91b288dc4b9db051101bcc6c5204faa6 100644 (file)
@@ -358,9 +358,6 @@ runtime·MHeap_Scavenger(void)
 
        h = &runtime·mheap;
        for(k=0;; k++) {
-               // Return to the scheduler in case the rest of the world is deadlocked.
-               runtime·gosched();
-
                runtime·noteclear(&note);
                runtime·entersyscall();
                runtime·notetsleep(&note, tick);
index 509d8208c88f2101daa9780d4649dc5ceb96004c..962f748ce860f921bfa8b6d9d9a2a02c75e35897 100644 (file)
@@ -521,16 +521,6 @@ mnextg(M *m, G *g)
        }
 }
 
-// Check for a deadlock situation.
-static void
-checkdeadlock(void) {
-       if((scvg == nil && runtime·sched.grunning == 0) ||
-          (scvg != nil && runtime·sched.grunning == 1 && runtime·sched.gwait == 0 &&
-           (scvg->status == Grunnable || scvg->status == Grunning || scvg->status == Gsyscall))) {
-               runtime·throw("all goroutines are asleep - deadlock!");
-       }
-}
-
 // Get the next goroutine that m should run.
 // Sched must be locked on entry, is unlocked on exit.
 // Makes sure that at most $GOMAXPROCS g's are
@@ -580,9 +570,6 @@ top:
                                continue;
                        }
                        runtime·sched.grunning++;
-                       // The work could actually have been the sole scavenger
-                       // goroutine. Look for deadlock situation.
-                       checkdeadlock();
                        schedunlock();
                        return gp;
                }
@@ -604,7 +591,11 @@ top:
        }
 
        // Look for deadlock situation.
-       checkdeadlock();
+       if((scvg == nil && runtime·sched.grunning == 0) ||
+          (scvg != nil && runtime·sched.grunning == 1 && runtime·sched.gwait == 0 &&
+           (scvg->status == Grunning || scvg->status == Gsyscall))) {
+               runtime·throw("all goroutines are asleep - deadlock!");
+       }
 
        m->nextg = nil;
        m->waitnextg = 1;
diff --git a/test/fixedbugs/bug429.go b/test/fixedbugs/bug429.go
deleted file mode 100644 (file)
index 991a371..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-// $G $D/$F.go && $L $F.$A && ! ./$A.out || echo BUG: bug429
-
-// Copyright 2012 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Should print deadlock message, not hang.
-
-package main
-
-func main() {
-       select{}
-}
index 376af8e53ccd68e13a3f8e37a9639c98e3e0ed3d..764f561969dd6b19531478f40309fe2eac036b6d 100644 (file)
@@ -15,9 +15,6 @@
 
 == fixedbugs/
 
-=========== fixedbugs/bug429.go
-throw: all goroutines are asleep - deadlock!
-
 == bugs/
 
 =========== bugs/bug395.go