]> Cypherpunks.ru repositories - gostls13.git/commit
runtime: add GODEBUG=dontfreezetheworld=1
authorMichael Pratt <mpratt@google.com>
Thu, 23 Mar 2023 17:52:36 +0000 (13:52 -0400)
committerGopher Robot <gobot@golang.org>
Fri, 24 Mar 2023 18:49:58 +0000 (18:49 +0000)
commit5f882d82661db9f2d3d04924f67defe1732f24e2
tree77b89c012c6a394f0132562d4fe1badfc3b63afa
parentfba8566cda3a7ba8f32ed398466f1d95bb205594
runtime: add GODEBUG=dontfreezetheworld=1

This GODEBUG flag disables the freezetheworld call during fatal panic.
freezetheworld asks the scheduler to stop running goroutines on all Ms.
This is normally useful, as it ensures we can collect a traceback from
every goroutine. However, it can be frustrating when debugging the
scheduler itself, as it significantly changes the scheduler state from
when the panic started.

Setting this flag has some disadvantages. Most notably, running
goroutines will not traceback in the standard output (though they may be
included in the final SIGQUIT loop). Additionally, we may missing
concurrently created goroutines when looping over allgs (CL 270861 made
this safe, but still racy). The final state of all goroutines will also
be further removed from the time of panic, as they continued to run for
a while.

One unfortunate part of this flag is the final SIGQUIT loop in the
runtime leaves every thread in the signal handler at exit. This is a bit
frustrating in gdb, which doesn't understand how to step beyond
sigtramp. The data is still there, but you must manually walk.

Change-Id: Ie6bd3ac521fcababea668196b60cf225a0be1a00
Reviewed-on: https://go-review.googlesource.com/c/go/+/478975
Reviewed-by: Austin Clements <austin@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Michael Pratt <mpratt@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
src/runtime/extern.go
src/runtime/panic.go
src/runtime/runtime1.go