]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: deflake TestSignalExitStatus
authorIan Lance Taylor <iant@golang.org>
Wed, 18 May 2016 01:16:47 +0000 (18:16 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 18 May 2016 04:08:08 +0000 (04:08 +0000)
The signal might get delivered to a different thread, and that thread
might not run again before the currently running thread returns and
exits. Sleep to give the other thread time to pick up the signal and
crash.

Not tested for all cases, but, optimistically:
Fixes #14063.

Change-Id: Iff58669ac6185ad91cce85e0e86f17497a3659fd
Reviewed-on: https://go-review.googlesource.com/23203
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
src/runtime/crash_unix_test.go
src/runtime/testdata/testprog/signal.go

index 771b303f6ee39aee0025469353f698d497f736c1..0a79661f1ead831c3b3652a07afea9715a9cbb49 100644 (file)
@@ -149,10 +149,6 @@ func loop(i int, c chan bool) {
 
 func TestSignalExitStatus(t *testing.T) {
        testenv.MustHaveGoBuild(t)
-       switch runtime.GOOS {
-       case "netbsd", "solaris":
-               t.Skipf("skipping on %s; see https://golang.org/issue/14063", runtime.GOOS)
-       }
        exe, err := buildTestProg(t, "testprog")
        if err != nil {
                t.Fatal(err)
index 7926908828ba85f31303b45d9fe14b8cdb2104e8..2ccbada57b3c1a474529c6ad06a7f039da062290 100644 (file)
@@ -6,7 +6,10 @@
 
 package main
 
-import "syscall"
+import (
+       "syscall"
+       "time"
+)
 
 func init() {
        register("SignalExitStatus", SignalExitStatus)
@@ -14,4 +17,13 @@ func init() {
 
 func SignalExitStatus() {
        syscall.Kill(syscall.Getpid(), syscall.SIGTERM)
+
+       // Should die immediately, but we've seen flakiness on various
+       // systems (see issue 14063). It's possible that the signal is
+       // being delivered to a different thread and we are returning
+       // and exiting before that thread runs again. Give the program
+       // a little while to die to make sure we pick up the signal
+       // before we return and exit the program. The time here
+       // shouldn't matter--we'll never really sleep this long.
+       time.Sleep(time.Second)
 }