mirror of
https://github.com/golang/go.git
synced 2025-05-07 16:43:03 +00:00
runtime/debug: eliminate temporary variadicity from SetCrashOutput
Updates #67182 Change-Id: I33fc8c515f4a9d120262ba30f61aea80ede5e9f8 Reviewed-on: https://go-review.googlesource.com/c/go/+/585420 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
6cd066f8b2
commit
a22cb5cabe
@ -1,2 +1,2 @@
|
|||||||
pkg runtime/debug, type CrashOptions struct #67182
|
pkg runtime/debug, type CrashOptions struct #67182
|
||||||
pkg runtime/debug, func SetCrashOutput(*os.File, ...CrashOptions) error #42888
|
pkg runtime/debug, func SetCrashOutput(*os.File, CrashOptions) error #42888
|
||||||
|
@ -91,7 +91,7 @@ func monitor() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("StdinPipe: %v", err)
|
log.Fatalf("StdinPipe: %v", err)
|
||||||
}
|
}
|
||||||
debug.SetCrashOutput(pipe.(*os.File)) // (this conversion is safe)
|
debug.SetCrashOutput(pipe.(*os.File), debug.CrashOptions{}) // (this conversion is safe)
|
||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
log.Fatalf("can't start monitor: %v", err)
|
log.Fatalf("can't start monitor: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -46,14 +46,7 @@ type CrashOptions struct {
|
|||||||
// To disable this additional crash output, call SetCrashOutput(nil).
|
// To disable this additional crash output, call SetCrashOutput(nil).
|
||||||
// If called concurrently with a crash, some in-progress output may be written
|
// If called concurrently with a crash, some in-progress output may be written
|
||||||
// to the old file even after an overriding SetCrashOutput returns.
|
// to the old file even after an overriding SetCrashOutput returns.
|
||||||
//
|
func SetCrashOutput(f *os.File, opts CrashOptions) error {
|
||||||
// TODO(adonovan): the variadic ... is a short-term measure to avoid
|
|
||||||
// breaking the call in x/telemetry; it will be removed before the
|
|
||||||
// go1.23 freeze.
|
|
||||||
func SetCrashOutput(f *os.File, opts ...CrashOptions) error {
|
|
||||||
if len(opts) > 1 {
|
|
||||||
panic("supply at most 1 CrashOptions")
|
|
||||||
}
|
|
||||||
fd := ^uintptr(0)
|
fd := ^uintptr(0)
|
||||||
if f != nil {
|
if f != nil {
|
||||||
// The runtime will write to this file descriptor from
|
// The runtime will write to this file descriptor from
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"runtime/debug"
|
||||||
. "runtime/debug"
|
. "runtime/debug"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@ -29,7 +30,7 @@ func TestMain(m *testing.M) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := SetCrashOutput(f); err != nil {
|
if err := SetCrashOutput(f, debug.CrashOptions{}); err != nil {
|
||||||
log.Fatal(err) // e.g. EMFILE
|
log.Fatal(err) // e.g. EMFILE
|
||||||
}
|
}
|
||||||
println("hello")
|
println("hello")
|
||||||
|
@ -28,7 +28,7 @@ func crash() {
|
|||||||
// Ensure that we get pc=0x%x values in the traceback.
|
// Ensure that we get pc=0x%x values in the traceback.
|
||||||
debug.SetTraceback("system")
|
debug.SetTraceback("system")
|
||||||
writeSentinel(os.Stdout)
|
writeSentinel(os.Stdout)
|
||||||
debug.SetCrashOutput(os.Stdout)
|
debug.SetCrashOutput(os.Stdout, debug.CrashOptions{})
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
// This call is typically inlined.
|
// This call is typically inlined.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user