48 lines
917 B
Go
48 lines
917 B
Go
|
// Copyright 2021 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 (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"runtime"
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
register("CrashDumpsAllThreads", CrashDumpsAllThreads)
|
||
|
}
|
||
|
|
||
|
func CrashDumpsAllThreads() {
|
||
|
const count = 4
|
||
|
runtime.GOMAXPROCS(count + 1)
|
||
|
|
||
|
chans := make([]chan bool, count)
|
||
|
for i := range chans {
|
||
|
chans[i] = make(chan bool)
|
||
|
go crashDumpsAllThreadsLoop(i, chans[i])
|
||
|
}
|
||
|
|
||
|
// Wait for all the goroutines to start executing.
|
||
|
for _, c := range chans {
|
||
|
<-c
|
||
|
}
|
||
|
|
||
|
// Tell our parent that all the goroutines are executing.
|
||
|
if _, err := os.NewFile(3, "pipe").WriteString("x"); err != nil {
|
||
|
fmt.Fprintf(os.Stderr, "write to pipe failed: %v\n", err)
|
||
|
os.Exit(2)
|
||
|
}
|
||
|
|
||
|
select {}
|
||
|
}
|
||
|
|
||
|
func crashDumpsAllThreadsLoop(i int, c chan bool) {
|
||
|
close(c)
|
||
|
for {
|
||
|
for j := 0; j < 0x7fffffff; j++ {
|
||
|
}
|
||
|
}
|
||
|
}
|