From ea5825b0b64e1a017a76eac0ad734e11ff557c8e Mon Sep 17 00:00:00 2001 From: Nick Patavalis Date: Sun, 11 Mar 2018 19:11:33 +0200 Subject: os: use poller when NewFile is called with a blocking descriptor. If NewFile is called with a file descriptor that is already set to non-blocking mode, it tries to return a pollable file (one for which SetDeadline methods work) by adding the filedes to the poll/netpoll mechanism. If called with a filedes in blocking mode, it returns a non-pollable file, as it always did. Fixes #22939 Updates #24331 Change-Id: Id54c8be1b83e6d35e14e76d7df0e57a9fd64e176 Reviewed-on: https://go-review.googlesource.com/100077 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/os/exec/exec_test.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/os/exec/exec_test.go') diff --git a/src/os/exec/exec_test.go b/src/os/exec/exec_test.go index ed2a55557d..61ffcafcd5 100644 --- a/src/os/exec/exec_test.go +++ b/src/os/exec/exec_test.go @@ -404,6 +404,12 @@ var testedAlreadyLeaked = false // stdin, stdout, stderr, epoll/kqueue, maybe testlog func basefds() uintptr { n := os.Stderr.Fd() + 1 + // The poll (epoll/kqueue) descriptor can be numerically + // either between stderr and the testlog-fd, or after + // testlog-fd. + if poll.PollDescriptor() == n { + n++ + } for _, arg := range os.Args { if strings.HasPrefix(arg, "-test.testlogfile=") { n++ -- cgit v1.3