]> Cypherpunks repositories - gostls13.git/commitdiff
os: do not close syscall.Stdin in TestReadStdin
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 Jan 2021 12:31:28 +0000 (13:31 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 Jan 2021 17:21:53 +0000 (17:21 +0000)
By calling NewConsoleFile on syscall.Stdin, we wind up closing it when
the function returns, which causes errors when all the tests are run in
a loop. To fix this, we instead create a duplicate handle of stdin.

Fixes #43720.

Change-Id: Ie6426e6306c7e1e39601794f4ff48bbf2fe67502
Reviewed-on: https://go-review.googlesource.com/c/go/+/284140
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Jason A. Donenfeld <Jason@zx2c4.com>

src/os/os_windows_test.go

index 8d1d1f61b26af7832764e66e087246508fa0cae3..b0929b4f3085a5532e7b0ce5dc75ac9953804110 100644 (file)
@@ -692,7 +692,16 @@ func TestReadStdin(t *testing.T) {
                poll.ReadConsole = old
        }()
 
-       testConsole := os.NewConsoleFile(syscall.Stdin, "test")
+       p, err := syscall.GetCurrentProcess()
+       if err != nil {
+               t.Fatalf("Unable to get handle to current process: %v", err)
+       }
+       var stdinDuplicate syscall.Handle
+       err = syscall.DuplicateHandle(p, syscall.Handle(syscall.Stdin), p, &stdinDuplicate, 0, false, syscall.DUPLICATE_SAME_ACCESS)
+       if err != nil {
+               t.Fatalf("Unable to duplicate stdin: %v", err)
+       }
+       testConsole := os.NewConsoleFile(stdinDuplicate, "test")
 
        var tests = []string{
                "abc",