github.com/go-darwin/sys@v0.0.0-20220510002607-68fd01f054ca/testdata/testprog/crashdump.go (about)

     1  // Copyright 2021 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package main
     6  
     7  import (
     8  	"fmt"
     9  	"os"
    10  	"runtime"
    11  )
    12  
    13  func init() {
    14  	register("CrashDumpsAllThreads", CrashDumpsAllThreads)
    15  }
    16  
    17  func CrashDumpsAllThreads() {
    18  	const count = 4
    19  	runtime.GOMAXPROCS(count + 1)
    20  
    21  	chans := make([]chan bool, count)
    22  	for i := range chans {
    23  		chans[i] = make(chan bool)
    24  		go crashDumpsAllThreadsLoop(i, chans[i])
    25  	}
    26  
    27  	// Wait for all the goroutines to start executing.
    28  	for _, c := range chans {
    29  		<-c
    30  	}
    31  
    32  	// Tell our parent that all the goroutines are executing.
    33  	if _, err := os.NewFile(3, "pipe").WriteString("x"); err != nil {
    34  		fmt.Fprintf(os.Stderr, "write to pipe failed: %v\n", err)
    35  		os.Exit(2)
    36  	}
    37  
    38  	select {}
    39  }
    40  
    41  func crashDumpsAllThreadsLoop(i int, c chan bool) {
    42  	close(c)
    43  	for {
    44  		for j := 0; j < 0x7fffffff; j++ {
    45  		}
    46  	}
    47  }