From 4c2614c57c5e93431aef95490dd2de956ceb9967 Mon Sep 17 00:00:00 2001 From: Mikio Hara Date: Tue, 27 Mar 2012 13:05:17 +0900 Subject: [PATCH] undo CL 5844051 / 5d0322034aa8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 | 3 --- src/pkg/runtime/proc.c | 19 +++++-------------- test/fixedbugs/bug429.go | 13 ------------- test/golden.out | 3 --- 4 files changed, 5 insertions(+), 33 deletions(-) delete mode 100644 test/fixedbugs/bug429.go diff --git a/src/pkg/runtime/mheap.c b/src/pkg/runtime/mheap.c index 9dd50835e79..c877bfca91b 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(¬e); runtime·entersyscall(); runtime·notetsleep(¬e, tick); diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 509d8208c88..962f748ce86 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 991a371377d..00000000000 --- 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 376af8e53cc..764f561969d 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