Skip to content

Commit

Permalink
os, syscall: use wait6 to avoid wait/kill race on dragonfly
Browse files Browse the repository at this point in the history
Follow CL 23967 and CL 24021 which did the same on linux and freebsd,
respectively.

Updates #13987
Updates #16028

Change-Id: Ia30ef8b5cffd8f9eb75c29ee5fe350dac2be6d44
Reviewed-on: https://go-review.googlesource.com/c/go/+/315279
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
  • Loading branch information
tklauser committed May 2, 2021
1 parent 7eb2d30 commit b177b2d
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 7 deletions.
4 changes: 2 additions & 2 deletions src/os/wait_unimp.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || (js && wasm) || netbsd || openbsd || solaris
// +build aix darwin dragonfly js,wasm netbsd openbsd solaris
//go:build aix || darwin || (js && wasm) || netbsd || openbsd || solaris
// +build aix darwin js,wasm netbsd openbsd solaris

package os

Expand Down
12 changes: 7 additions & 5 deletions src/os/wait_wait6.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build freebsd
// +build freebsd
//go:build dragonfly || freebsd
// +build dragonfly freebsd

package os

Expand All @@ -23,9 +23,9 @@ func (p *Process) blockUntilWaitable() (bool, error) {
// The arguments on 32-bit FreeBSD look like the following:
// - freebsd32_wait6_args{ idtype, id1, id2, status, options, wrusage, info } or
// - freebsd32_wait6_args{ idtype, pad, id1, id2, status, options, wrusage, info } when PAD64_REQUIRED=1 on ARM, MIPS or PowerPC
if runtime.GOARCH == "386" {
if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" {
_, _, errno = syscall.Syscall9(syscall.SYS_WAIT6, _P_PID, uintptr(p.Pid), 0, 0, syscall.WEXITED|syscall.WNOWAIT, 0, 0, 0, 0)
} else if runtime.GOARCH == "arm" {
} else if runtime.GOOS == "freebsd" && runtime.GOARCH == "arm" {
_, _, errno = syscall.Syscall9(syscall.SYS_WAIT6, _P_PID, 0, uintptr(p.Pid), 0, 0, syscall.WEXITED|syscall.WNOWAIT, 0, 0, 0)
} else {
_, _, errno = syscall.Syscall6(syscall.SYS_WAIT6, _P_PID, uintptr(p.Pid), 0, syscall.WEXITED|syscall.WNOWAIT, 0, 0)
Expand All @@ -35,7 +35,9 @@ func (p *Process) blockUntilWaitable() (bool, error) {
}
}
runtime.KeepAlive(p)
if errno != 0 {
if errno == syscall.ENOSYS {
return false, nil
} else if errno != 0 {
return false, NewSyscallError("wait6", errno)
}
return true, nil
Expand Down
2 changes: 2 additions & 0 deletions src/syscall/zerrors_dragonfly_amd64.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/syscall/zsysnum_dragonfly_amd64.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit b177b2d

Please sign in to comment.