mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: merge setting new signal mask in minit
All the variants that sets the new signal mask in minit do the same thing, so merge them. This requires an OS-specific sigdelset function; the function already exists for linux, and is now added for other OS's. Change-Id: Ie96f6f02e2cf09c43005085985a078bd9581f670 Reviewed-on: https://go-review.googlesource.com/29771 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
3390294308
commit
ac24388e5e
8 changed files with 60 additions and 83 deletions
|
|
@ -573,6 +573,13 @@ func unblocksig(sig int32) {
|
|||
sigprocmask(_SIG_UNBLOCK, &set, nil)
|
||||
}
|
||||
|
||||
// minitSignals is called when initializing a new m to set the
|
||||
// thread's alternate signal stack and signal mask.
|
||||
func minitSignals() {
|
||||
minitSignalStack()
|
||||
minitSignalMask()
|
||||
}
|
||||
|
||||
// minitSignalStack is called when initializing a new m to set the
|
||||
// alternate signal stack. If the alternate signal stack is not set
|
||||
// for the thread (the normal case) then set the alternate signal
|
||||
|
|
@ -594,6 +601,24 @@ func minitSignalStack() {
|
|||
}
|
||||
}
|
||||
|
||||
// minitSignalMask is called when initializing a new m to set the
|
||||
// thread's signal mask. When this is called all signals have been
|
||||
// blocked for the thread. This starts with m.sigmask, which was set
|
||||
// either from initSigmask for a newly created thread or by calling
|
||||
// msigsave if this is a non-Go thread calling a Go function. It
|
||||
// removes all essential signals from the mask, thus causing those
|
||||
// signals to not be blocked. Then it sets the thread's signal mask.
|
||||
// After this is called the thread can receive signals.
|
||||
func minitSignalMask() {
|
||||
nmask := getg().m.sigmask
|
||||
for i := range sigtable {
|
||||
if sigtable[i].flags&_SigUnblock != 0 {
|
||||
sigdelset(&nmask, i)
|
||||
}
|
||||
}
|
||||
sigprocmask(_SIG_SETMASK, &nmask, nil)
|
||||
}
|
||||
|
||||
// setGsignalStack sets the gsignal stack of the current m to an
|
||||
// alternate signal stack returned from the sigaltstack system call.
|
||||
// This is used when handling a signal if non-Go code has set the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue