Commit 057a34a2 authored by Elias Naur's avatar Elias Naur

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: 's avatarIan Lance Taylor <iant@golang.org>
parent 51ba2bb8
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment