aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/exec_freebsd.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2017-03-21 22:16:16 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2017-03-21 22:37:27 +0000
commit2730c17a863e0eeb7afa3589608eece8cc50e6f3 (patch)
tree247cded80ca44d6438130feb60364f00df7054bc /src/syscall/exec_freebsd.go
parentee80afe326bab0a4829bd39186c4f343ac680a40 (diff)
downloadgo-2730c17a863e0eeb7afa3589608eece8cc50e6f3.tar.xz
syscall, os: fix FreeBSD 9 build
I broke FreeBSD 9 in https://golang.org/cl/38426 by using Pipe2. We still want to support FreeBSD 9 for one last release (Go 1.9 will be the last), and FreeBSD 9 doesn't have Pipe2. So this still uses Pipe2, but falls back to Pipe on error. Updates #18854 Updates #19072 Change-Id: I1de90fb83606c93fb84b4b86fba31e207a702835 Reviewed-on: https://go-review.googlesource.com/38430 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/syscall/exec_freebsd.go')
-rw-r--r--src/syscall/exec_freebsd.go18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/syscall/exec_freebsd.go b/src/syscall/exec_freebsd.go
index 1654b4ba2a..4ed32c0614 100644
--- a/src/syscall/exec_freebsd.go
+++ b/src/syscall/exec_freebsd.go
@@ -5,5 +5,21 @@
package syscall
func forkExecPipe(p []int) error {
- return Pipe2(p, O_CLOEXEC)
+ err := Pipe2(p, O_CLOEXEC)
+ if err == nil {
+ return nil
+ }
+
+ // FreeBSD 9 fallback.
+ // TODO: remove this for Go 1.10 per Issue 19072
+ err = Pipe(p)
+ if err != nil {
+ return err
+ }
+ _, err = fcntl(p[0], F_SETFD, FD_CLOEXEC)
+ if err != nil {
+ return err
+ }
+ _, err = fcntl(p[1], F_SETFD, FD_CLOEXEC)
+ return err
}