From: Alan Donovan Date: Wed, 15 May 2024 18:55:19 +0000 (-0400) Subject: runtime/debug: add SetCrashOutput(...CrashOptions) parameter X-Git-Tag: go1.23rc1~333 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3f7a030e02c31aaf28e8e107270d6b33920c1cae;p=gostls13.git runtime/debug: add SetCrashOutput(...CrashOptions) parameter This is a placeholder for future options (e.g. JSON). The parameter is temporarily variadic to avoid breaking x/telemetry (see CL 585378), but I plan to remove the "..." later this week. Updates #67182 Change-Id: I3f6f39455d852f92902f8e3f007d3093cbe555db Reviewed-on: https://go-review.googlesource.com/c/go/+/585557 LUCI-TryBot-Result: Go LUCI Reviewed-by: Austin Clements --- diff --git a/api/next/42888.txt b/api/next/42888.txt index f9b8e1e475..dcba97b9fa 100644 --- a/api/next/42888.txt +++ b/api/next/42888.txt @@ -1 +1,2 @@ -pkg runtime/debug, func SetCrashOutput(*os.File) error #42888 +pkg runtime/debug, type CrashOptions struct #67182 +pkg runtime/debug, func SetCrashOutput(*os.File, ...CrashOptions) error #42888 diff --git a/doc/next/6-stdlib/99-minor/runtime/debug/67182.md b/doc/next/6-stdlib/99-minor/runtime/debug/67182.md new file mode 100644 index 0000000000..d83864a3db --- /dev/null +++ b/doc/next/6-stdlib/99-minor/runtime/debug/67182.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/runtime/debug/stack.go b/src/runtime/debug/stack.go index 8dfea52d34..dc7dc5d569 100644 --- a/src/runtime/debug/stack.go +++ b/src/runtime/debug/stack.go @@ -31,6 +31,12 @@ func Stack() []byte { } } +// CrashOptions provides options that control the formatting of the +// fatal crash message. +type CrashOptions struct { + /* for future expansion */ +} + // SetCrashOutput configures a single additional file where unhandled // panics and other fatal errors are printed, in addition to standard error. // There is only one additional file: calling SetCrashOutput again overrides @@ -40,7 +46,14 @@ func Stack() []byte { // 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. -func SetCrashOutput(f *os.File) 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) if f != nil { // The runtime will write to this file descriptor from