// Copyright 2019 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.

// Invoke signal hander in the VDSO context (see issue 32912).

package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"runtime/pprof"
	"time"
)

func init() {
	register("SignalInVDSO", signalInVDSO)
}

func signalInVDSO() {
	f, err := ioutil.TempFile("", "timeprofnow")
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}

	if err := pprof.StartCPUProfile(f); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}

	t0 := time.Now()
	t1 := t0
	// We should get a profiling signal 100 times a second,
	// so running for 1 second should be sufficient.
	for t1.Sub(t0) < time.Second {
		t1 = time.Now()
	}

	pprof.StopCPUProfile()

	name := f.Name()
	if err := f.Close(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}

	if err := os.Remove(name); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(2)
	}

	fmt.Println("success")
}
