From ee1b51294ab50179b60d6c548ddded5b91cd0cbb Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 18 Nov 2020 08:53:00 +0100 Subject: [PATCH] runtime: use pipe2 syscall for Pipe in tests On FreeBSD >= 11 with a kernel built with COMPAT_FREEBSD11 but not COMPAT_FREEBSD10, the pipe syscall is not available. Thus, tests using runtime.pipe fail with ENOSYS. As suggested by Ian, fix this by calling pipe2(0) in these tests and fall back to pipe() in case of ENOSYS. Fixes #42659 Change-Id: Ifbb8008884b7901fe87830d162ad326122c5fab9 Reviewed-on: https://go-review.googlesource.com/c/go/+/270917 Trust: Tobias Klauser Run-TryBot: Tobias Klauser TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor --- src/runtime/export_pipe2_test.go | 15 +++++++++++++++ src/runtime/export_pipe_test.go | 9 +++++++++ src/runtime/export_unix_test.go | 1 - 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/runtime/export_pipe2_test.go create mode 100644 src/runtime/export_pipe_test.go diff --git a/src/runtime/export_pipe2_test.go b/src/runtime/export_pipe2_test.go new file mode 100644 index 0000000000..9d580d3313 --- /dev/null +++ b/src/runtime/export_pipe2_test.go @@ -0,0 +1,15 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd linux netbsd openbsd solaris + +package runtime + +func Pipe() (r, w int32, errno int32) { + r, w, errno = pipe2(0) + if errno == _ENOSYS { + return pipe() + } + return r, w, errno +} diff --git a/src/runtime/export_pipe_test.go b/src/runtime/export_pipe_test.go new file mode 100644 index 0000000000..8f66770fb9 --- /dev/null +++ b/src/runtime/export_pipe_test.go @@ -0,0 +1,9 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly + +package runtime + +var Pipe = pipe diff --git a/src/runtime/export_unix_test.go b/src/runtime/export_unix_test.go index 621488eaba..307c63fd68 100644 --- a/src/runtime/export_unix_test.go +++ b/src/runtime/export_unix_test.go @@ -9,7 +9,6 @@ package runtime import "unsafe" var NonblockingPipe = nonblockingPipe -var Pipe = pipe var SetNonblock = setNonblock var Closeonexec = closeonexec -- 2.50.0