mirror of
https://github.com/golang/go.git
synced 2024-10-01 07:17:21 +00:00
os: don't trust O_CLOEXEC on OS X
OS X 10.6 doesn't do O_CLOEXEC. OS X 10.7 does. For now, always fall back to using syscall.CloseOnExec on darwin. This can removed when 10.6 is old news, or if we find a way to cheaply & reliably detect 10.6 vs 10.7 at runtime. Fixes #2587 R=golang-dev, rsc, iant CC=golang-dev https://golang.org/cl/5500053
This commit is contained in:
parent
0735e06cfd
commit
1dfe3d1f6e
@ -256,8 +256,9 @@ func TestHelperProcess(*testing.T) {
|
|||||||
fmt.Printf("ReadAll from fd 3: %v", err)
|
fmt.Printf("ReadAll from fd 3: %v", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
// TODO(bradfitz,iant): the rest of this test is disabled
|
// TODO(bradfitz): remove this block once the builders are restarted
|
||||||
// for now. remove this block once we figure out why it fails.
|
// with a new binary including be47ea17bea0 (set CLOEXEC on epoll/kqueue fds)
|
||||||
|
// and 5500053 (don't trust O_CLOEXEC on OS X).
|
||||||
{
|
{
|
||||||
os.Stderr.Write(bs)
|
os.Stderr.Write(bs)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
|
@ -68,8 +68,13 @@ func OpenFile(name string, flag int, perm uint32) (file *File, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// There's a race here with fork/exec, which we are
|
// There's a race here with fork/exec, which we are
|
||||||
// content to live with. See ../syscall/exec.go
|
// content to live with. See ../syscall/exec_unix.go.
|
||||||
if syscall.O_CLOEXEC == 0 { // O_CLOEXEC not supported
|
// On OS X 10.6, the O_CLOEXEC flag is not respected.
|
||||||
|
// On OS X 10.7, the O_CLOEXEC flag works.
|
||||||
|
// Without a cheap & reliable way to detect 10.6 vs 10.7 at
|
||||||
|
// runtime, we just always call syscall.CloseOnExec on Darwin.
|
||||||
|
// Once >=10.7 is prevalent, this extra call can removed.
|
||||||
|
if syscall.O_CLOEXEC == 0 || runtime.GOOS == "darwin" { // O_CLOEXEC not supported
|
||||||
syscall.CloseOnExec(r)
|
syscall.CloseOnExec(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user