1
0
mirror of https://github.com/golang/go synced 2024-11-23 10:00:03 -07:00
go/test/fixedbugs/issue9321.go
Keith Randall 50bc3d5bbc runtime: fix deadlock in runtime.Stack
It shouldn't semacquire() inside an acquirem(), the runtime
thinks that means deadlock.  It actually isn't a deadlock, but it
looks like it because acquirem() does m.locks++.

Candidate for inclusion in 1.4.1.  runtime.Stack with all=true
is pretty unuseable in GOMAXPROCS>1 environment.

fixes #9321

Change-Id: Iac6b664217d24763b9878c20e49229a1ecffc805
Reviewed-on: https://go-review.googlesource.com/1600
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
2014-12-16 17:04:45 +00:00

38 lines
541 B
Go

// run
// Copyright 2014 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.
package main
import (
"bytes"
"runtime"
"runtime/pprof"
"sync"
)
func test() {
var wg sync.WaitGroup
wg.Add(2)
test := func() {
for i := 0; i < 100; i++ {
buf := &bytes.Buffer{}
pprof.Lookup("goroutine").WriteTo(buf, 2)
}
wg.Done()
}
go test()
go test()
wg.Wait()
}
func main() {
runtime.GOMAXPROCS(2)
for i := 0; i < 100; i++ {
test()
}
}