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
This commit is contained in:
Ian Lance Taylor 2018-07-02 16:28:43 +00:00
parent a08acce83a
commit 7edd4c1885
2 changed files with 6 additions and 3 deletions

View File

@ -1,4 +1,4 @@
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.

View File

@ -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.