aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/signal_unix.go2
-rw-r--r--src/runtime/sigqueue.go9
-rw-r--r--src/runtime/sigqueue_plan9.go5
3 files changed, 16 insertions, 0 deletions
diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go
index d87f1bed16..0d8caae7a0 100644
--- a/src/runtime/signal_unix.go
+++ b/src/runtime/signal_unix.go
@@ -103,6 +103,8 @@ func initsig(preinit bool) {
// set SA_ONSTACK if necessary.
if fwdSig[i] != _SIG_DFL && fwdSig[i] != _SIG_IGN {
setsigstack(i)
+ } else if fwdSig[i] == _SIG_IGN {
+ sigInitIgnored(i)
}
continue
}
diff --git a/src/runtime/sigqueue.go b/src/runtime/sigqueue.go
index 98331627eb..9f53240954 100644
--- a/src/runtime/sigqueue.go
+++ b/src/runtime/sigqueue.go
@@ -237,7 +237,16 @@ func signal_ignore(s uint32) {
atomic.Store(&sig.ignored[s/32], i)
}
+// sigInitIgnored marks the signal as already ignored. This is called at
+// program start by siginit.
+func sigInitIgnored(s uint32) {
+ i := sig.ignored[s/32]
+ i |= 1 << (s & 31)
+ atomic.Store(&sig.ignored[s/32], i)
+}
+
// Checked by signal handlers.
+//go:linkname signal_ignored os/signal.signal_ignored
func signal_ignored(s uint32) bool {
i := atomic.Load(&sig.ignored[s/32])
return i&(1<<(s&31)) != 0
diff --git a/src/runtime/sigqueue_plan9.go b/src/runtime/sigqueue_plan9.go
index 76668045a8..934742a1f4 100644
--- a/src/runtime/sigqueue_plan9.go
+++ b/src/runtime/sigqueue_plan9.go
@@ -152,3 +152,8 @@ func signal_disable(s uint32) {
//go:linkname signal_ignore os/signal.signal_ignore
func signal_ignore(s uint32) {
}
+
+//go:linkname signal_ignored os/signal.signal_ignored
+func signal_ignored(s uint32) bool {
+ return false
+}