// 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++ { } } }