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 <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Emmanuel T Odeke 2020-02-29 02:32:21 -08:00 committed by Emmanuel Odeke
parent 33e98326a2
commit c1abd5ab70

View file

@ -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)
}