mirror of
https://github.com/golang/go
synced 2024-11-18 06:54:49 -07:00
syscall: use fcntl F_DUP2FD_CLOEXEC in forkAndExecInChild on solaris
Use fcntl(oldfd, F_DUP2FD_CLOEXEC, newfd) to duplicate the file descriptor and mark is as close-on-exec instead of dup2 & fcntl. Note that the value for F_DUP2FD_CLOEXEC is different on Solaris and Illumos and thus the definition is moved from zerrors_solaris_amd64.go to solaris/illumos specific files. Change-Id: I9a52801d1a01471ec3f065520575e3fafee92855 Reviewed-on: https://go-review.googlesource.com/c/go/+/428375 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Auto-Submit: Jenny Rakoczy <jenny@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Jenny Rakoczy <jenny@golang.org> Run-TryBot: Jenny Rakoczy <jenny@golang.org> Run-TryBot: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
e0822b55ac
commit
a7db14241c
@ -199,7 +199,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
|
||||
// so that pass 2 won't stomp on an fd it needs later.
|
||||
if pipe < nextfd {
|
||||
switch runtime.GOOS {
|
||||
case "illumos":
|
||||
case "illumos", "solaris":
|
||||
_, err1 = fcntl1(uintptr(pipe), _F_DUP2FD_CLOEXEC, uintptr(nextfd))
|
||||
default:
|
||||
_, err1 = dup2child(uintptr(pipe), uintptr(nextfd))
|
||||
@ -220,7 +220,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
|
||||
nextfd++
|
||||
}
|
||||
switch runtime.GOOS {
|
||||
case "illumos":
|
||||
case "illumos", "solaris":
|
||||
_, err1 = fcntl1(uintptr(fd[i]), _F_DUP2FD_CLOEXEC, uintptr(nextfd))
|
||||
default:
|
||||
_, err1 = dup2child(uintptr(fd[i]), uintptr(nextfd))
|
||||
|
@ -4,12 +4,13 @@
|
||||
|
||||
//go:build illumos
|
||||
|
||||
// Illumos system calls not present on Solaris.
|
||||
|
||||
package syscall
|
||||
|
||||
import "unsafe"
|
||||
|
||||
// F_DUP2FD_CLOEXEC has different values on Solaris and Illumos.
|
||||
const F_DUP2FD_CLOEXEC = 0x24
|
||||
|
||||
//go:cgo_import_dynamic libc_flock flock "libc.so"
|
||||
|
||||
//go:linkname procFlock libc_flock
|
||||
|
@ -14,13 +14,13 @@ package syscall
|
||||
|
||||
import "unsafe"
|
||||
|
||||
const _F_DUP2FD_CLOEXEC = F_DUP2FD_CLOEXEC
|
||||
|
||||
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||
|
||||
const _F_DUP2FD_CLOEXEC = F_DUP2FD_CLOEXEC
|
||||
|
||||
// Implemented in asm_solaris_amd64.s.
|
||||
func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||
func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||
|
10
src/syscall/syscall_solarisonly.go
Normal file
10
src/syscall/syscall_solarisonly.go
Normal file
@ -0,0 +1,10 @@
|
||||
// Copyright 2022 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.
|
||||
|
||||
//go:build solaris && !illumos
|
||||
|
||||
package syscall
|
||||
|
||||
// F_DUP2FD_CLOEXEC has different values on Solaris and Illumos.
|
||||
const F_DUP2FD_CLOEXEC = 0x30
|
@ -276,7 +276,6 @@ const (
|
||||
F_CHKFL = 0x8
|
||||
F_COMPAT = 0x8
|
||||
F_DUP2FD = 0x9
|
||||
F_DUP2FD_CLOEXEC = 0x24
|
||||
F_DUPFD = 0x0
|
||||
F_DUPFD_CLOEXEC = 0x25
|
||||
F_FREESP = 0xb
|
||||
|
Loading…
Reference in New Issue
Block a user