aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikio Hara <mikioh.mikioh@gmail.com>2012-03-27 13:05:17 +0900
committerRuss Cox <rsc@golang.org>2012-03-27 13:05:17 +0900
commit4c2614c57c5e93431aef95490dd2de956ceb9967 (patch)
treef5c7a7d1131402975c9bb344dc2bef5bac0a9cc8
parenta3498f4be4844802c2a942dee3a61531e6ed5275 (diff)
downloadgo-4c2614c57c5e93431aef95490dd2de956ceb9967.tar.gz
go-4c2614c57c5e93431aef95490dd2de956ceb9967.zip
undo CL 5844051 / 5d0322034aa8
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
-rw-r--r--src/pkg/runtime/mheap.c3
-rw-r--r--src/pkg/runtime/proc.c19
-rw-r--r--test/fixedbugs/bug429.go13
-rw-r--r--test/golden.out3
4 files changed, 5 insertions, 33 deletions
diff --git a/src/pkg/runtime/mheap.c b/src/pkg/runtime/mheap.c
index 9dd50835e7..c877bfca91 100644
--- a/src/pkg/runtime/mheap.c
+++ b/src/pkg/runtime/mheap.c
@@ -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);
diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c
index 509d8208c8..962f748ce8 100644
--- a/src/pkg/runtime/proc.c
+++ b/src/pkg/runtime/proc.c
@@ -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
index 991a371377..0000000000
--- a/test/fixedbugs/bug429.go
+++ /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{}
-}
diff --git a/test/golden.out b/test/golden.out
index 376af8e53c..764f561969 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -15,9 +15,6 @@
== fixedbugs/
-=========== fixedbugs/bug429.go
-throw: all goroutines are asleep - deadlock!
-
== bugs/
=========== bugs/bug395.go