mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: signal forwarding for darwin/amd64
Follows the linux signal forwarding semantics from http://golang.org/cl/8712, sharing the implementation of sigfwdgo. Forwarding for 386, arm, and arm64 will follow. Change-Id: I6bf30d563d19da39b6aec6900c7fe12d82ed4f62 Reviewed-on: https://go-review.googlesource.com/9302 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
c20ff36fe2
commit
a5b693b431
10 changed files with 106 additions and 76 deletions
|
|
@ -6,9 +6,43 @@
|
|||
|
||||
package runtime
|
||||
|
||||
import _ "unsafe" // for go:linkname
|
||||
import "unsafe"
|
||||
|
||||
//go:linkname os_sigpipe os.sigpipe
|
||||
func os_sigpipe() {
|
||||
systemstack(sigpipe)
|
||||
}
|
||||
|
||||
// Determines if the signal should be handled by Go and if not, forwards the
|
||||
// signal to the handler that was installed before Go's. Returns whether the
|
||||
// signal was forwarded.
|
||||
//go:nosplit
|
||||
func sigfwdgo(sig uint32, info *siginfo, ctx unsafe.Pointer) bool {
|
||||
g := getg()
|
||||
c := &sigctxt{info, ctx}
|
||||
if sig >= uint32(len(sigtable)) {
|
||||
return false
|
||||
}
|
||||
fwdFn := fwdSig[sig]
|
||||
flags := sigtable[sig].flags
|
||||
|
||||
// If there is no handler to forward to, no need to forward.
|
||||
if fwdFn == _SIG_DFL {
|
||||
return false
|
||||
}
|
||||
// Only forward synchronous signals.
|
||||
if c.sigcode() == _SI_USER || flags&_SigPanic == 0 {
|
||||
return false
|
||||
}
|
||||
// Determine if the signal occurred inside Go code. We test that:
|
||||
// (1) we were in a goroutine (i.e., m.curg != nil), and
|
||||
// (2) we weren't in CGO (i.e., m.curg.syscallsp == 0).
|
||||
if g != nil && g.m != nil && g.m.curg != nil && g.m.curg.syscallsp == 0 {
|
||||
return false
|
||||
}
|
||||
// Signal not handled by Go, forward it.
|
||||
if fwdFn != _SIG_IGN {
|
||||
sigfwd(fwdFn, sig, info, ctx)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue