diff options
author | Elias Naur <elias.naur@gmail.com> | 2017-08-19 16:59:19 +0200 |
---|---|---|
committer | Elias Naur <elias.naur@gmail.com> | 2017-08-29 07:40:19 +0000 |
commit | c3189cee717a47dd7936d9f82904db72b28293f6 (patch) | |
tree | e3fc16aff861b031fec26f74f79ed10ce085ff5a /src/runtime/crash_cgo_test.go | |
parent | 176cd48e574817bbb912c139396324c187b31279 (diff) | |
download | go-c3189cee717a47dd7936d9f82904db72b28293f6.tar.gz go-c3189cee717a47dd7936d9f82904db72b28293f6.zip |
runtime: forward crashing signals to late handlers
CL 49590 made it possible for external signal handlers to catch
signals from a crashing Go process. This CL extends that support
to handlers registered after the Go runtime has initialized.
Updates #20392 (and possibly fix it).
Change-Id: I18eccd5e958a505f4d1782a7fc51c16bd3a4ff9c
Reviewed-on: https://go-review.googlesource.com/57291
Run-TryBot: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/runtime/crash_cgo_test.go')
-rw-r--r-- | src/runtime/crash_cgo_test.go | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/runtime/crash_cgo_test.go b/src/runtime/crash_cgo_test.go index 2869ac7687..40d12dc3dd 100644 --- a/src/runtime/crash_cgo_test.go +++ b/src/runtime/crash_cgo_test.go @@ -430,12 +430,16 @@ func TestCatchPanic(t *testing.T) { t.Fatal(err) } - cmd := testEnv(exec.Command(exe, "CgoCatchPanic")) - // Make sure a panic results in a crash. - cmd.Env = append(cmd.Env, "GOTRACEBACK=crash") - // Tell testprogcgo to install an early signal handler for SIGABRT - cmd.Env = append(cmd.Env, "CGOCATCHPANIC_INSTALL_HANDLER=1") - if out, err := cmd.CombinedOutput(); err != nil { - t.Errorf("testprogcgo CgoCatchPanic failed: %v\n%s", err, out) + for _, early := range []bool{true, false} { + cmd := testEnv(exec.Command(exe, "CgoCatchPanic")) + // Make sure a panic results in a crash. + cmd.Env = append(cmd.Env, "GOTRACEBACK=crash") + if early { + // Tell testprogcgo to install an early signal handler for SIGABRT + cmd.Env = append(cmd.Env, "CGOCATCHPANIC_EARLY_HANDLER=1") + } + if out, err := cmd.CombinedOutput(); err != nil { + t.Errorf("testprogcgo CgoCatchPanic failed: %v\n%s", err, out) + } } } |