Commit 7edd4c18 by Ian Lance Taylor

re PR go/86331 (the gccgo's "go" tool looks like failing to invoke any sub go command)

	PR go/86331
    os: check return value as well as error from waitid
    
    https://gcc.gnu.org/PR86331 indicates that if a signal handler runs it
    is possible for syscall.Syscall6 to return a non-zero errno value even
    if no error occurs. That is a problem in general, but this fix will
    let us work around the general problem for the specific case of
    calling waitid.
    
    Reviewed-on: https://go-review.googlesource.com/121595

From-SVN: r262313
parent a08acce8
e1fcce0aec27b1f50ac0e736f39f4c806c2a5baa 94738979a3422e845acf358a766aabf8b9275d43
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -28,9 +28,12 @@ func (p *Process) blockUntilWaitable() (bool, error) { ...@@ -28,9 +28,12 @@ func (p *Process) blockUntilWaitable() (bool, error) {
// We don't care about the values it returns. // We don't care about the values it returns.
var siginfo [16]uint64 var siginfo [16]uint64
psig := &siginfo[0] psig := &siginfo[0]
_, _, e := syscall.Syscall6(syscall.SYS_WAITID, _P_PID, uintptr(p.Pid), uintptr(unsafe.Pointer(psig)), syscall.WEXITED|syscall.WNOWAIT, 0, 0) r, _, e := syscall.Syscall6(syscall.SYS_WAITID, _P_PID, uintptr(p.Pid), uintptr(unsafe.Pointer(psig)), syscall.WEXITED|syscall.WNOWAIT, 0, 0)
runtime.KeepAlive(p) runtime.KeepAlive(p)
if e != 0 { // Check r as well as e because syscall.Syscall6 currently
// just returns errno, and the SIGCHLD signal handler may
// change errno. See https://gcc.gnu.org/PR86331.
if r != 0 && e != 0 {
// waitid has been available since Linux 2.6.9, but // waitid has been available since Linux 2.6.9, but
// reportedly is not available in Ubuntu on Windows. // reportedly is not available in Ubuntu on Windows.
// See issue 16610. // See issue 16610.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment