mirror of https://github.com/golang/go.git
[release-branch.go1.24] runtime: use WCLONE when waiting on pidfd test child
As of CL 650835, the pidfd test child no longer sends SIGCHLD on exit.
Per clone(2), "If [the child termination] signal is specified as
anything other than SIGCHLD, then the parent process must specify the
__WALL or __WCLONE options when waiting for the child with wait(2)."
Align with this requirement.
For #71849.
For #71828.
Change-Id: I6a6a636c739e4a59abe1533fe429a433e8588939
Reviewed-on: https://go-review.googlesource.com/c/go/+/651415
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Michael Pratt <mpratt@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit e1e65ae3ee)
Reviewed-on: https://go-review.googlesource.com/c/go/+/651476
This commit is contained in:
parent
d418e224ae
commit
becc17ebcd
|
|
@ -779,7 +779,12 @@ func os_checkClonePidfd() error {
|
|||
var err error
|
||||
for {
|
||||
var status WaitStatus
|
||||
_, err = Wait4(int(pid), &status, 0, nil)
|
||||
// WCLONE is an untyped constant that sets bit 31, so
|
||||
// it cannot convert directly to int on 32-bit
|
||||
// GOARCHes. We must convert through another type
|
||||
// first.
|
||||
flags := uint(WCLONE)
|
||||
_, err = Wait4(int(pid), &status, int(flags), nil)
|
||||
if err != EINTR {
|
||||
break
|
||||
}
|
||||
|
|
@ -797,7 +802,7 @@ func os_checkClonePidfd() error {
|
|||
|
||||
for {
|
||||
const _P_PIDFD = 3
|
||||
_, _, errno = Syscall6(SYS_WAITID, _P_PIDFD, uintptr(pidfd), 0, WEXITED, 0, 0)
|
||||
_, _, errno = Syscall6(SYS_WAITID, _P_PIDFD, uintptr(pidfd), 0, WEXITED | WCLONE, 0, 0)
|
||||
if errno != EINTR {
|
||||
break
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue