mirror of https://github.com/golang/go.git
runtime: don't always unblock all signals on dragonfly, freebsd and openbsd
https://golang.org/cl/10173 intrduced msigsave, ensureSigM and _SigUnblock but didn't enable the new signal save/restore mechanism for SIG{HUP,INT,QUIT,ABRT,TERM} on DragonFly BSD, FreeBSD and OpenBSD. At present, it looks like they have the implementation. This change enables the new mechanism on DragonFly BSD, FreeBSD and OpenBSD the same as Darwin, NetBSD. Change-Id: Ifb4b4743b3b4f50bfcdc7cf1fe1b59c377fa2a41 Reviewed-on: https://go-review.googlesource.com/18657 Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
7345fa54c1
commit
6f59ccb052
|
|
@ -10,4 +10,3 @@ func TestSetgid(t *testing.T) { testSetgid(t) }
|
||||||
func Test6997(t *testing.T) { test6997(t) }
|
func Test6997(t *testing.T) { test6997(t) }
|
||||||
func TestBuildID(t *testing.T) { testBuildID(t) }
|
func TestBuildID(t *testing.T) { testBuildID(t) }
|
||||||
func Test9400(t *testing.T) { test9400(t) }
|
func Test9400(t *testing.T) { test9400(t) }
|
||||||
func TestSigProcMask(t *testing.T) { testSigProcMask(t) }
|
|
||||||
|
|
|
||||||
|
|
@ -9,3 +9,4 @@ package cgotest
|
||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
func TestSigaltstack(t *testing.T) { testSigaltstack(t) }
|
func TestSigaltstack(t *testing.T) { testSigaltstack(t) }
|
||||||
|
func TestSigprocmask(t *testing.T) { testSigprocmask(t) }
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
package cgotest
|
package cgotest
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -28,7 +30,7 @@ func IntoGoAndBack() {
|
||||||
blocked = C.CheckBlocked() != 0
|
blocked = C.CheckBlocked() != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func testSigProcMask(t *testing.T) {
|
func testSigprocmask(t *testing.T) {
|
||||||
if r := C.RunSigThread(); r != 0 {
|
if r := C.RunSigThread(); r != 0 {
|
||||||
t.Error("pthread_create/pthread_join failed")
|
t.Error("pthread_create/pthread_join failed")
|
||||||
}
|
}
|
||||||
|
|
@ -14,14 +14,14 @@ var sigtable = [...]sigTabT{
|
||||||
/* 1 */ {_SigNotify + _SigKill, "SIGHUP: terminal line hangup"},
|
/* 1 */ {_SigNotify + _SigKill, "SIGHUP: terminal line hangup"},
|
||||||
/* 2 */ {_SigNotify + _SigKill, "SIGINT: interrupt"},
|
/* 2 */ {_SigNotify + _SigKill, "SIGINT: interrupt"},
|
||||||
/* 3 */ {_SigNotify + _SigThrow, "SIGQUIT: quit"},
|
/* 3 */ {_SigNotify + _SigThrow, "SIGQUIT: quit"},
|
||||||
/* 4 */ {_SigThrow, "SIGILL: illegal instruction"},
|
/* 4 */ {_SigThrow + _SigUnblock, "SIGILL: illegal instruction"},
|
||||||
/* 5 */ {_SigThrow, "SIGTRAP: trace trap"},
|
/* 5 */ {_SigThrow + _SigUnblock, "SIGTRAP: trace trap"},
|
||||||
/* 6 */ {_SigNotify + _SigThrow, "SIGABRT: abort"},
|
/* 6 */ {_SigNotify + _SigThrow, "SIGABRT: abort"},
|
||||||
/* 7 */ {_SigThrow, "SIGEMT: emulate instruction executed"},
|
/* 7 */ {_SigThrow, "SIGEMT: emulate instruction executed"},
|
||||||
/* 8 */ {_SigPanic, "SIGFPE: floating-point exception"},
|
/* 8 */ {_SigPanic + _SigUnblock, "SIGFPE: floating-point exception"},
|
||||||
/* 9 */ {0, "SIGKILL: kill"},
|
/* 9 */ {0, "SIGKILL: kill"},
|
||||||
/* 10 */ {_SigPanic, "SIGBUS: bus error"},
|
/* 10 */ {_SigPanic + _SigUnblock, "SIGBUS: bus error"},
|
||||||
/* 11 */ {_SigPanic, "SIGSEGV: segmentation violation"},
|
/* 11 */ {_SigPanic + _SigUnblock, "SIGSEGV: segmentation violation"},
|
||||||
/* 12 */ {_SigThrow, "SIGSYS: bad system call"},
|
/* 12 */ {_SigThrow, "SIGSYS: bad system call"},
|
||||||
/* 13 */ {_SigNotify, "SIGPIPE: write to broken pipe"},
|
/* 13 */ {_SigNotify, "SIGPIPE: write to broken pipe"},
|
||||||
/* 14 */ {_SigNotify, "SIGALRM: alarm clock"},
|
/* 14 */ {_SigNotify, "SIGALRM: alarm clock"},
|
||||||
|
|
@ -30,14 +30,14 @@ var sigtable = [...]sigTabT{
|
||||||
/* 17 */ {0, "SIGSTOP: stop"},
|
/* 17 */ {0, "SIGSTOP: stop"},
|
||||||
/* 18 */ {_SigNotify + _SigDefault, "SIGTSTP: keyboard stop"},
|
/* 18 */ {_SigNotify + _SigDefault, "SIGTSTP: keyboard stop"},
|
||||||
/* 19 */ {_SigNotify + _SigDefault, "SIGCONT: continue after stop"},
|
/* 19 */ {_SigNotify + _SigDefault, "SIGCONT: continue after stop"},
|
||||||
/* 20 */ {_SigNotify, "SIGCHLD: child status has changed"},
|
/* 20 */ {_SigNotify + _SigUnblock, "SIGCHLD: child status has changed"},
|
||||||
/* 21 */ {_SigNotify + _SigDefault, "SIGTTIN: background read from tty"},
|
/* 21 */ {_SigNotify + _SigDefault, "SIGTTIN: background read from tty"},
|
||||||
/* 22 */ {_SigNotify + _SigDefault, "SIGTTOU: background write to tty"},
|
/* 22 */ {_SigNotify + _SigDefault, "SIGTTOU: background write to tty"},
|
||||||
/* 23 */ {_SigNotify, "SIGIO: i/o now possible"},
|
/* 23 */ {_SigNotify, "SIGIO: i/o now possible"},
|
||||||
/* 24 */ {_SigNotify, "SIGXCPU: cpu limit exceeded"},
|
/* 24 */ {_SigNotify, "SIGXCPU: cpu limit exceeded"},
|
||||||
/* 25 */ {_SigNotify, "SIGXFSZ: file size limit exceeded"},
|
/* 25 */ {_SigNotify, "SIGXFSZ: file size limit exceeded"},
|
||||||
/* 26 */ {_SigNotify, "SIGVTALRM: virtual alarm clock"},
|
/* 26 */ {_SigNotify, "SIGVTALRM: virtual alarm clock"},
|
||||||
/* 27 */ {_SigNotify, "SIGPROF: profiling alarm clock"},
|
/* 27 */ {_SigNotify + _SigUnblock, "SIGPROF: profiling alarm clock"},
|
||||||
/* 28 */ {_SigNotify, "SIGWINCH: window size change"},
|
/* 28 */ {_SigNotify, "SIGWINCH: window size change"},
|
||||||
/* 29 */ {_SigNotify, "SIGINFO: status request from keyboard"},
|
/* 29 */ {_SigNotify, "SIGINFO: status request from keyboard"},
|
||||||
/* 30 */ {_SigNotify, "SIGUSR1: user-defined signal 1"},
|
/* 30 */ {_SigNotify, "SIGUSR1: user-defined signal 1"},
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,14 @@ var sigtable = [...]sigTabT{
|
||||||
/* 1 */ {_SigNotify + _SigKill, "SIGHUP: terminal line hangup"},
|
/* 1 */ {_SigNotify + _SigKill, "SIGHUP: terminal line hangup"},
|
||||||
/* 2 */ {_SigNotify + _SigKill, "SIGINT: interrupt"},
|
/* 2 */ {_SigNotify + _SigKill, "SIGINT: interrupt"},
|
||||||
/* 3 */ {_SigNotify + _SigThrow, "SIGQUIT: quit"},
|
/* 3 */ {_SigNotify + _SigThrow, "SIGQUIT: quit"},
|
||||||
/* 4 */ {_SigThrow, "SIGILL: illegal instruction"},
|
/* 4 */ {_SigThrow + _SigUnblock, "SIGILL: illegal instruction"},
|
||||||
/* 5 */ {_SigThrow, "SIGTRAP: trace trap"},
|
/* 5 */ {_SigThrow + _SigUnblock, "SIGTRAP: trace trap"},
|
||||||
/* 6 */ {_SigNotify + _SigThrow, "SIGABRT: abort"},
|
/* 6 */ {_SigNotify + _SigThrow, "SIGABRT: abort"},
|
||||||
/* 7 */ {_SigThrow, "SIGEMT: emulate instruction executed"},
|
/* 7 */ {_SigThrow, "SIGEMT: emulate instruction executed"},
|
||||||
/* 8 */ {_SigPanic, "SIGFPE: floating-point exception"},
|
/* 8 */ {_SigPanic + _SigUnblock, "SIGFPE: floating-point exception"},
|
||||||
/* 9 */ {0, "SIGKILL: kill"},
|
/* 9 */ {0, "SIGKILL: kill"},
|
||||||
/* 10 */ {_SigPanic, "SIGBUS: bus error"},
|
/* 10 */ {_SigPanic + _SigUnblock, "SIGBUS: bus error"},
|
||||||
/* 11 */ {_SigPanic, "SIGSEGV: segmentation violation"},
|
/* 11 */ {_SigPanic + _SigUnblock, "SIGSEGV: segmentation violation"},
|
||||||
/* 12 */ {_SigNotify, "SIGSYS: bad system call"},
|
/* 12 */ {_SigNotify, "SIGSYS: bad system call"},
|
||||||
/* 13 */ {_SigNotify, "SIGPIPE: write to broken pipe"},
|
/* 13 */ {_SigNotify, "SIGPIPE: write to broken pipe"},
|
||||||
/* 14 */ {_SigNotify, "SIGALRM: alarm clock"},
|
/* 14 */ {_SigNotify, "SIGALRM: alarm clock"},
|
||||||
|
|
@ -32,14 +32,14 @@ var sigtable = [...]sigTabT{
|
||||||
/* 17 */ {0, "SIGSTOP: stop"},
|
/* 17 */ {0, "SIGSTOP: stop"},
|
||||||
/* 18 */ {_SigNotify + _SigDefault, "SIGTSTP: keyboard stop"},
|
/* 18 */ {_SigNotify + _SigDefault, "SIGTSTP: keyboard stop"},
|
||||||
/* 19 */ {_SigNotify + _SigDefault, "SIGCONT: continue after stop"},
|
/* 19 */ {_SigNotify + _SigDefault, "SIGCONT: continue after stop"},
|
||||||
/* 20 */ {_SigNotify, "SIGCHLD: child status has changed"},
|
/* 20 */ {_SigNotify + _SigUnblock, "SIGCHLD: child status has changed"},
|
||||||
/* 21 */ {_SigNotify + _SigDefault, "SIGTTIN: background read from tty"},
|
/* 21 */ {_SigNotify + _SigDefault, "SIGTTIN: background read from tty"},
|
||||||
/* 22 */ {_SigNotify + _SigDefault, "SIGTTOU: background write to tty"},
|
/* 22 */ {_SigNotify + _SigDefault, "SIGTTOU: background write to tty"},
|
||||||
/* 23 */ {_SigNotify, "SIGIO: i/o now possible"},
|
/* 23 */ {_SigNotify, "SIGIO: i/o now possible"},
|
||||||
/* 24 */ {_SigNotify, "SIGXCPU: cpu limit exceeded"},
|
/* 24 */ {_SigNotify, "SIGXCPU: cpu limit exceeded"},
|
||||||
/* 25 */ {_SigNotify, "SIGXFSZ: file size limit exceeded"},
|
/* 25 */ {_SigNotify, "SIGXFSZ: file size limit exceeded"},
|
||||||
/* 26 */ {_SigNotify, "SIGVTALRM: virtual alarm clock"},
|
/* 26 */ {_SigNotify, "SIGVTALRM: virtual alarm clock"},
|
||||||
/* 27 */ {_SigNotify, "SIGPROF: profiling alarm clock"},
|
/* 27 */ {_SigNotify + _SigUnblock, "SIGPROF: profiling alarm clock"},
|
||||||
/* 28 */ {_SigNotify, "SIGWINCH: window size change"},
|
/* 28 */ {_SigNotify, "SIGWINCH: window size change"},
|
||||||
/* 29 */ {_SigNotify, "SIGINFO: status request from keyboard"},
|
/* 29 */ {_SigNotify, "SIGINFO: status request from keyboard"},
|
||||||
/* 30 */ {_SigNotify, "SIGUSR1: user-defined signal 1"},
|
/* 30 */ {_SigNotify, "SIGUSR1: user-defined signal 1"},
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,14 @@ var sigtable = [...]sigTabT{
|
||||||
/* 1 */ {_SigNotify + _SigKill, "SIGHUP: terminal line hangup"},
|
/* 1 */ {_SigNotify + _SigKill, "SIGHUP: terminal line hangup"},
|
||||||
/* 2 */ {_SigNotify + _SigKill, "SIGINT: interrupt"},
|
/* 2 */ {_SigNotify + _SigKill, "SIGINT: interrupt"},
|
||||||
/* 3 */ {_SigNotify + _SigThrow, "SIGQUIT: quit"},
|
/* 3 */ {_SigNotify + _SigThrow, "SIGQUIT: quit"},
|
||||||
/* 4 */ {_SigThrow, "SIGILL: illegal instruction"},
|
/* 4 */ {_SigThrow + _SigUnblock, "SIGILL: illegal instruction"},
|
||||||
/* 5 */ {_SigThrow, "SIGTRAP: trace trap"},
|
/* 5 */ {_SigThrow + _SigUnblock, "SIGTRAP: trace trap"},
|
||||||
/* 6 */ {_SigNotify + _SigThrow, "SIGABRT: abort"},
|
/* 6 */ {_SigNotify + _SigThrow, "SIGABRT: abort"},
|
||||||
/* 7 */ {_SigThrow, "SIGEMT: emulate instruction executed"},
|
/* 7 */ {_SigThrow, "SIGEMT: emulate instruction executed"},
|
||||||
/* 8 */ {_SigPanic, "SIGFPE: floating-point exception"},
|
/* 8 */ {_SigPanic + _SigUnblock, "SIGFPE: floating-point exception"},
|
||||||
/* 9 */ {0, "SIGKILL: kill"},
|
/* 9 */ {0, "SIGKILL: kill"},
|
||||||
/* 10 */ {_SigPanic, "SIGBUS: bus error"},
|
/* 10 */ {_SigPanic + _SigUnblock, "SIGBUS: bus error"},
|
||||||
/* 11 */ {_SigPanic, "SIGSEGV: segmentation violation"},
|
/* 11 */ {_SigPanic + _SigUnblock, "SIGSEGV: segmentation violation"},
|
||||||
/* 12 */ {_SigThrow, "SIGSYS: bad system call"},
|
/* 12 */ {_SigThrow, "SIGSYS: bad system call"},
|
||||||
/* 13 */ {_SigNotify, "SIGPIPE: write to broken pipe"},
|
/* 13 */ {_SigNotify, "SIGPIPE: write to broken pipe"},
|
||||||
/* 14 */ {_SigNotify, "SIGALRM: alarm clock"},
|
/* 14 */ {_SigNotify, "SIGALRM: alarm clock"},
|
||||||
|
|
@ -32,14 +32,14 @@ var sigtable = [...]sigTabT{
|
||||||
/* 17 */ {0, "SIGSTOP: stop"},
|
/* 17 */ {0, "SIGSTOP: stop"},
|
||||||
/* 18 */ {_SigNotify + _SigDefault, "SIGTSTP: keyboard stop"},
|
/* 18 */ {_SigNotify + _SigDefault, "SIGTSTP: keyboard stop"},
|
||||||
/* 19 */ {_SigNotify + _SigDefault, "SIGCONT: continue after stop"},
|
/* 19 */ {_SigNotify + _SigDefault, "SIGCONT: continue after stop"},
|
||||||
/* 20 */ {_SigNotify, "SIGCHLD: child status has changed"},
|
/* 20 */ {_SigNotify + _SigUnblock, "SIGCHLD: child status has changed"},
|
||||||
/* 21 */ {_SigNotify + _SigDefault, "SIGTTIN: background read from tty"},
|
/* 21 */ {_SigNotify + _SigDefault, "SIGTTIN: background read from tty"},
|
||||||
/* 22 */ {_SigNotify + _SigDefault, "SIGTTOU: background write to tty"},
|
/* 22 */ {_SigNotify + _SigDefault, "SIGTTOU: background write to tty"},
|
||||||
/* 23 */ {_SigNotify, "SIGIO: i/o now possible"},
|
/* 23 */ {_SigNotify, "SIGIO: i/o now possible"},
|
||||||
/* 24 */ {_SigNotify, "SIGXCPU: cpu limit exceeded"},
|
/* 24 */ {_SigNotify, "SIGXCPU: cpu limit exceeded"},
|
||||||
/* 25 */ {_SigNotify, "SIGXFSZ: file size limit exceeded"},
|
/* 25 */ {_SigNotify, "SIGXFSZ: file size limit exceeded"},
|
||||||
/* 26 */ {_SigNotify, "SIGVTALRM: virtual alarm clock"},
|
/* 26 */ {_SigNotify, "SIGVTALRM: virtual alarm clock"},
|
||||||
/* 27 */ {_SigNotify, "SIGPROF: profiling alarm clock"},
|
/* 27 */ {_SigNotify + _SigUnblock, "SIGPROF: profiling alarm clock"},
|
||||||
/* 28 */ {_SigNotify, "SIGWINCH: window size change"},
|
/* 28 */ {_SigNotify, "SIGWINCH: window size change"},
|
||||||
/* 29 */ {_SigNotify, "SIGINFO: status request from keyboard"},
|
/* 29 */ {_SigNotify, "SIGINFO: status request from keyboard"},
|
||||||
/* 30 */ {_SigNotify, "SIGUSR1: user-defined signal 1"},
|
/* 30 */ {_SigNotify, "SIGUSR1: user-defined signal 1"},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue