From 8af02feb8a97fb18e3d106320744f38208e5ec3d Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Thu, 5 Sep 2019 06:49:34 +0100 Subject: [PATCH] add test case for #32912 --- src/runtime/vdso_test.go | 46 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/runtime/vdso_test.go diff --git a/src/runtime/vdso_test.go b/src/runtime/vdso_test.go new file mode 100644 index 00000000000000..4e85dbe8e0b6d8 --- /dev/null +++ b/src/runtime/vdso_test.go @@ -0,0 +1,46 @@ +// 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 runtime_test + +import ( + "fmt" + "io/ioutil" + "os" + "runtime/pprof" + "time" + "testing" +) + +func TestVDSO(t *testing.T) { + 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 10 seconds should be sufficient. + for t1.Sub(t0) < 10*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) + } +}