mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: for c-archive/c-shared, install signal handlers synchronously
The previous behaviour of installing the signal handlers in a separate thread meant that Go initialization raced with non-Go initialization if the non-Go initialization also wanted to install signal handlers. Make installing signal handlers synchronous so that the process-wide behavior is predictable. Update #9896. Change-Id: Ice24299877ec46f8518b072a381932d273096a32 Reviewed-on: https://go-review.googlesource.com/18150 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
parent
0b3807a2a3
commit
21b4f234c7
23 changed files with 200 additions and 12 deletions
|
|
@ -220,6 +220,8 @@ type sigactiont struct {
|
|||
sa_flags int32
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
var sa sigactiont
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
|
|
@ -234,10 +236,14 @@ func setsig(i int32, fn uintptr, restart bool) {
|
|||
sigaction(i, &sa, nil)
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
throw("setsigstack")
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
var sa sigactiont
|
||||
sigaction(i, nil, &sa)
|
||||
|
|
@ -260,6 +266,8 @@ func signalstack(s *stack) {
|
|||
sigaltstack(&st, nil)
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func updatesigmask(m sigmask) {
|
||||
sigprocmask(_SIG_SETMASK, sigset(m[0]))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue