Merge pull request #30185 from hashicorp/jbardin/panic-cleanup
Cleanup panic output
This commit is contained in:
commit
7e1646919b
|
@ -26,18 +26,29 @@ shown below, and any additional information which may help replicate the issue.
|
||||||
|
|
||||||
`
|
`
|
||||||
|
|
||||||
|
// In case multiple goroutines panic concurrently, ensure only the first one
|
||||||
|
// recovered by PanicHandler starts printing.
|
||||||
|
var panicMutex sync.Mutex
|
||||||
|
|
||||||
// PanicHandler is called to recover from an internal panic in Terraform, and
|
// PanicHandler is called to recover from an internal panic in Terraform, and
|
||||||
// augments the standard stack trace with a more user friendly error message.
|
// augments the standard stack trace with a more user friendly error message.
|
||||||
// PanicHandler must be called as a defered function, and must be the first
|
// PanicHandler must be called as a defered function, and must be the first
|
||||||
// defer called at the start of a new goroutine.
|
// defer called at the start of a new goroutine.
|
||||||
func PanicHandler() {
|
func PanicHandler() {
|
||||||
|
// Have all managed goroutines checkin here, and prevent them from exiting
|
||||||
|
// if there's a panic in progress. While this can't lock the entire runtime
|
||||||
|
// to block progress, we can prevent some cases where Terraform may return
|
||||||
|
// early before the panic has been printed out.
|
||||||
|
panicMutex.Lock()
|
||||||
|
defer panicMutex.Unlock()
|
||||||
|
|
||||||
recovered := recover()
|
recovered := recover()
|
||||||
if recovered == nil {
|
if recovered == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprint(os.Stderr, panicOutput)
|
fmt.Fprint(os.Stderr, panicOutput)
|
||||||
fmt.Fprint(os.Stderr, recovered)
|
fmt.Fprint(os.Stderr, recovered, "\n")
|
||||||
|
|
||||||
// When called from a deferred function, debug.PrintStack will include the
|
// When called from a deferred function, debug.PrintStack will include the
|
||||||
// full stack from the point of the pending panic.
|
// full stack from the point of the pending panic.
|
||||||
|
|
Loading…
Reference in New Issue