...
Run Format

Source file src/runtime/testdata/testprogcgo/aprof.go

Documentation: runtime/testdata/testprogcgo

  // Copyright 2016 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
  
  // Test that SIGPROF received in C code does not crash the process
  // looking for the C code's func pointer.
  
  // The test fails when the function is the first C function.
  // The exported functions are the first C functions, so we use that.
  
  // extern void GoNop();
  import "C"
  
  import (
  	"bytes"
  	"fmt"
  	"runtime/pprof"
  	"time"
  )
  
  func init() {
  	register("CgoCCodeSIGPROF", CgoCCodeSIGPROF)
  }
  
  //export GoNop
  func GoNop() {}
  
  func CgoCCodeSIGPROF() {
  	c := make(chan bool)
  	go func() {
  		<-c
  		start := time.Now()
  		for i := 0; i < 1e7; i++ {
  			if i%1000 == 0 {
  				if time.Since(start) > time.Second {
  					break
  				}
  			}
  			C.GoNop()
  		}
  		c <- true
  	}()
  
  	var buf bytes.Buffer
  	pprof.StartCPUProfile(&buf)
  	c <- true
  	<-c
  	pprof.StopCPUProfile()
  
  	fmt.Println("OK")
  }
  

View as plain text