mirror of
https://github.com/golang/go
synced 2024-11-12 02:10:21 -07:00
os/signal: don't ignore SIGINT in TestAtomicStop child process
Fixes #35085 Change-Id: Ice611e1223392f687061a43fd4c2298ea22774fb Reviewed-on: https://go-review.googlesource.com/c/go/+/207081 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
parent
e77106cc54
commit
3f21c2381d
@ -422,6 +422,19 @@ func TestAtomicStop(t *testing.T) {
|
||||
|
||||
testenv.MustHaveExec(t)
|
||||
|
||||
// Call Notify for SIGINT before starting the child process.
|
||||
// That ensures that SIGINT is not ignored for the child.
|
||||
// This is necessary because if SIGINT is ignored when a
|
||||
// Go program starts, then it remains ignored, and closing
|
||||
// the last notification channel for SIGINT will switch it
|
||||
// back to being ignored. In that case the assumption of
|
||||
// atomicStopTestProgram, that it will either die from SIGINT
|
||||
// or have it be reported, breaks down, as there is a third
|
||||
// option: SIGINT might be ignored.
|
||||
cs := make(chan os.Signal, 1)
|
||||
Notify(cs, syscall.SIGINT)
|
||||
defer Stop(cs)
|
||||
|
||||
const execs = 10
|
||||
for i := 0; i < execs; i++ {
|
||||
timeout := "0"
|
||||
@ -466,6 +479,12 @@ func TestAtomicStop(t *testing.T) {
|
||||
// It tries to trigger a signal delivery race. This function should
|
||||
// either catch a signal or die from it.
|
||||
func atomicStopTestProgram() {
|
||||
// This test won't work if SIGINT is ignored here.
|
||||
if Ignored(syscall.SIGINT) {
|
||||
fmt.Println("SIGINT is ignored")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
const tries = 10
|
||||
|
||||
timeout := 2 * time.Second
|
||||
|
Loading…
Reference in New Issue
Block a user