From 718f553915cc1c13d7b31cd264c131987f67f14d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 13 Nov 2019 11:09:27 -0800 Subject: [PATCH] os/exec: skip poll descriptors when checking for open descriptors It turns out that there is a path that initializes netpoll and opens file descriptors before running the os/exec init function: on some systems, the uses of NewFile when setting os.Stdin and friends can initialize netpoll which can open file descriptors. This in itself is not a problem, but when we check whether the new files are open using os.NewFile, a side-effect is to put them into non-blocking mode. This can then break future uses of netpoll. Updates #35469 Fixes #35566 Change-Id: I1b2e2c943695d1c2d29496b050abbce9ee710a00 Reviewed-on: https://go-review.googlesource.com/c/go/+/207078 Reviewed-by: Bryan C. Mills --- src/os/exec/exec_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/os/exec/exec_test.go b/src/os/exec/exec_test.go index 0498c7d915..19bda6902a 100644 --- a/src/os/exec/exec_test.go +++ b/src/os/exec/exec_test.go @@ -47,6 +47,9 @@ func init() { return } for fd := uintptr(3); fd <= 100; fd++ { + if poll.IsPollDescriptor(fd) { + continue + } // We have no good portable way to check whether an FD is open. // We use NewFile to create a *os.File, which lets us // know whether it is open, but then we have to cope with -- 2.50.0