mirror of
https://github.com/golang/go
synced 2024-11-17 17:54:48 -07:00
runtime: fix crashing with foreign signal handlers on Darwin
The dieFromSignal runtime function attempts to forward crashing signals to a signal handler registered before the runtime was initialized, if any. However, on Darwin, a special signal handler trampoline is invoked, even for non-Go signal handlers. Clear the crashing signal's handlingSig entry to ensure sigtramp forwards the signal. Fixes the darwin/386 builder. Updates #20392 Updates #19389 Change-Id: I441a3d30c672cdb21ed6d8f1e1322d7c0e5b9669 Reviewed-on: https://go-review.googlesource.com/55032 Run-TryBot: Elias Naur <elias.naur@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
51ba2bb819
commit
057a34a281
@ -398,6 +398,9 @@ func dieFromSignal(sig uint32) {
|
||||
// First, try any signal handler installed before the runtime
|
||||
// initialized.
|
||||
fn := atomic.Loaduintptr(&fwdSig[sig])
|
||||
// On Darwin, sigtramp is called even for non-Go signal handlers.
|
||||
// Mark the signal as unhandled to ensure it is forwarded.
|
||||
atomic.Store(&handlingSig[sig], 0)
|
||||
setsig(sig, fn)
|
||||
raise(sig)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user