From c1abd5ab70e1e8ac59a2960d41fe6d83d68ea69b Mon Sep 17 00:00:00 2001 From: Emmanuel T Odeke Date: Sat, 29 Feb 2020 02:32:21 -0800 Subject: [PATCH] runtime: don't invoke t.Fatal* in goroutine in TestLibraryCtrlHandler Change-Id: I8bb06c360cab3e5a74b0b0f98bb25cca4741d66d Reviewed-on: https://go-review.googlesource.com/c/go/+/221605 Run-TryBot: Emmanuel Odeke TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/runtime/signal_windows_test.go | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/runtime/signal_windows_test.go b/src/runtime/signal_windows_test.go index 423516df65..f99857193c 100644 --- a/src/runtime/signal_windows_test.go +++ b/src/runtime/signal_windows_test.go @@ -5,6 +5,7 @@ package runtime_test import ( "bufio" "bytes" + "fmt" "internal/testenv" "io/ioutil" "os" @@ -63,19 +64,20 @@ func TestVectoredHandlerDontCrashOnLibrary(t *testing.T) { } } -func sendCtrlBreak(t *testing.T, pid int) { +func sendCtrlBreak(pid int) error { kernel32, err := syscall.LoadDLL("kernel32.dll") if err != nil { - t.Fatalf("LoadDLL: %v\n", err) + return fmt.Errorf("LoadDLL: %v\n", err) } generateEvent, err := kernel32.FindProc("GenerateConsoleCtrlEvent") if err != nil { - t.Fatalf("FindProc: %v\n", err) + return fmt.Errorf("FindProc: %v\n", err) } result, _, err := generateEvent.Call(syscall.CTRL_BREAK_EVENT, uintptr(pid)) if result == 0 { - t.Fatalf("GenerateConsoleCtrlEvent: %v\n", err) + return fmt.Errorf("GenerateConsoleCtrlEvent: %v\n", err) } + return nil } // TestLibraryCtrlHandler tests that Go DLL allows calling program to handle console control events. @@ -130,18 +132,20 @@ func TestLibraryCtrlHandler(t *testing.T) { t.Fatalf("Start failed: %v", err) } - sentCtrl := make(chan bool) + errCh := make(chan error, 1) go func() { - defer close(sentCtrl) if line, err := outReader.ReadString('\n'); err != nil { - t.Fatalf("Could not read stdout: %v", err) + errCh <- fmt.Errorf("could not read stdout: %v", err) } else if strings.TrimSpace(line) != "ready" { - t.Fatalf("Unexpected message: %v", line) + errCh <- fmt.Errorf("unexpected message: %v", line) + } else { + errCh <- sendCtrlBreak(cmd.Process.Pid) } - sendCtrlBreak(t, cmd.Process.Pid) }() - <-sentCtrl + if err := <-errCh; err != nil { + t.Fatal(err) + } if err := cmd.Wait(); err != nil { t.Fatalf("Program exited with error: %v\n%s", err, &stderr) } -- 2.50.0