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, 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 { 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)
} }

View File

@ -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

View File

@ -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")

View File

@ -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.