diff options
author | Ian Lance Taylor <iant@golang.org> | 2016-09-27 22:24:51 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2016-09-28 13:12:47 +0000 |
commit | eb268cb321edf6e2bbaa832acb2e61db6b081f98 (patch) | |
tree | 7c2fd37a99424eec125732b6280f58d8af143072 /src/runtime/os3_solaris.go | |
parent | 594cddd62598dcfc1fe6ee1c3e5978063f498dc1 (diff) | |
download | go-eb268cb321edf6e2bbaa832acb2e61db6b081f98.tar.gz go-eb268cb321edf6e2bbaa832acb2e61db6b081f98.zip |
runtime: minor simplifications to signal code
Change setsig, setsigstack, getsig, raise, raiseproc to take uint32 for
signal number parameter, as that is the type mostly used for signal
numbers. Same for dieFromSignal, sigInstallGoHandler, raisebadsignal.
Remove setsig restart parameter, as it is always either true or
irrelevant.
Don't check the handler in setsigstack, as the only caller does that
anyhow.
Don't bother to convert the handler from sigtramp to sighandler in
getsig, as it will never be called when the handler is sigtramp or
sighandler.
Don't check the return value from rt_sigaction in the GNU/Linux version
of setsigstack; no other setsigstack checks it, and it never fails.
Change-Id: I6bbd677e048a77eddf974dd3d017bc3c560fbd48
Reviewed-on: https://go-review.googlesource.com/29953
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/runtime/os3_solaris.go')
-rw-r--r-- | src/runtime/os3_solaris.go | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/runtime/os3_solaris.go b/src/runtime/os3_solaris.go index 322a57c27f..ad66797b71 100644 --- a/src/runtime/os3_solaris.go +++ b/src/runtime/os3_solaris.go @@ -252,14 +252,10 @@ func sigtramp() //go:nosplit //go:nowritebarrierrec -func setsig(i int32, fn uintptr, restart bool) { +func setsig(i uint32, fn uintptr) { var sa sigactiont - sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK - sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK - if restart { - sa.sa_flags |= _SA_RESTART - } + sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTART sa.sa_mask = sigset_all if fn == funcPC(sighandler) { fn = funcPC(sigtramp) @@ -270,11 +266,10 @@ func setsig(i int32, fn uintptr, restart bool) { //go:nosplit //go:nowritebarrierrec -func setsigstack(i int32) { +func setsigstack(i uint32) { var sa sigactiont sigaction(i, nil, &sa) - handler := *((*uintptr)(unsafe.Pointer(&sa._funcptr))) - if handler == 0 || handler == _SIG_DFL || handler == _SIG_IGN || sa.sa_flags&_SA_ONSTACK != 0 { + if sa.sa_flags&_SA_ONSTACK != 0 { return } sa.sa_flags |= _SA_ONSTACK @@ -283,12 +278,9 @@ func setsigstack(i int32) { //go:nosplit //go:nowritebarrierrec -func getsig(i int32) uintptr { +func getsig(i uint32) uintptr { var sa sigactiont sigaction(i, nil, &sa) - if *((*uintptr)(unsafe.Pointer(&sa._funcptr))) == funcPC(sigtramp) { - return funcPC(sighandler) - } return *((*uintptr)(unsafe.Pointer(&sa._funcptr))) } @@ -465,11 +457,11 @@ func pthread_create(thread *pthread, attr *pthreadattr, fn uintptr, arg unsafe.P //go:nosplit //go:nowritebarrierrec -func raise(sig int32) /* int32 */ { +func raise(sig uint32) /* int32 */ { sysvicall1(&libc_raise, uintptr(sig)) } -func raiseproc(sig int32) /* int32 */ { +func raiseproc(sig uint32) /* int32 */ { pid := sysvicall0(&libc_getpid) sysvicall2(&libc_kill, pid, uintptr(sig)) } @@ -505,7 +497,7 @@ func setitimer(which int32, value *itimerval, ovalue *itimerval) /* int32 */ { //go:nosplit //go:nowritebarrierrec -func sigaction(sig int32, act *sigactiont, oact *sigactiont) /* int32 */ { +func sigaction(sig uint32, act *sigactiont, oact *sigactiont) /* int32 */ { sysvicall3(&libc_sigaction, uintptr(sig), uintptr(unsafe.Pointer(act)), uintptr(unsafe.Pointer(oact))) } |