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:
Alan Donovan 2024-05-15 17:41:56 -04:00
parent 6cd066f8b2
commit a22cb5cabe
5 changed files with 6 additions and 12 deletions

View File

@ -1,2 +1,2 @@
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

View File

@ -91,7 +91,7 @@ func monitor() {
if err != nil {
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 {
log.Fatalf("can't start monitor: %v", err)
}

View File

@ -46,14 +46,7 @@ type CrashOptions struct {
// To disable this additional crash output, call SetCrashOutput(nil).
// If called concurrently with a crash, some in-progress output may be written
// to the old file even after an overriding SetCrashOutput returns.
//
// 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")
}
func SetCrashOutput(f *os.File, opts CrashOptions) error {
fd := ^uintptr(0)
if f != nil {
// The runtime will write to this file descriptor from

View File

@ -13,6 +13,7 @@ import (
"os/exec"
"path/filepath"
"runtime"
"runtime/debug"
. "runtime/debug"
"strings"
"testing"
@ -29,7 +30,7 @@ func TestMain(m *testing.M) {
if err != nil {
log.Fatal(err)
}
if err := SetCrashOutput(f); err != nil {
if err := SetCrashOutput(f, debug.CrashOptions{}); err != nil {
log.Fatal(err) // e.g. EMFILE
}
println("hello")

View File

@ -28,7 +28,7 @@ func crash() {
// Ensure that we get pc=0x%x values in the traceback.
debug.SetTraceback("system")
writeSentinel(os.Stdout)
debug.SetCrashOutput(os.Stdout)
debug.SetCrashOutput(os.Stdout, debug.CrashOptions{})
go func() {
// This call is typically inlined.