mirror of
https://github.com/criyle/go-sandbox.git
synced 2025-11-04 14:49:53 +08:00
forkexec: fix child error report
This commit is contained in:
parent
47ad6f0016
commit
f308637481
@ -61,7 +61,6 @@ func (r *Runner) Start() (int, error) {
|
|||||||
|
|
||||||
func syncWithChild(r *Runner, p [2]int, pid int, err1 syscall.Errno) (int, error) {
|
func syncWithChild(r *Runner, p [2]int, pid int, err1 syscall.Errno) (int, error) {
|
||||||
var (
|
var (
|
||||||
r1 uintptr
|
|
||||||
err2 syscall.Errno
|
err2 syscall.Errno
|
||||||
err error
|
err error
|
||||||
unshareUser = r.CloneFlags&unix.CLONE_NEWUSER == unix.CLONE_NEWUSER
|
unshareUser = r.CloneFlags&unix.CLONE_NEWUSER == unix.CLONE_NEWUSER
|
||||||
@ -90,7 +89,7 @@ func syncWithChild(r *Runner, p [2]int, pid int, err1 syscall.Errno) (int, error
|
|||||||
n, err := readChildErr(p[0], &childErr)
|
n, err := readChildErr(p[0], &childErr)
|
||||||
// child returned error code
|
// child returned error code
|
||||||
if (n != int(unsafe.Sizeof(err2)) && n != int(unsafe.Sizeof(childErr))) || childErr.Err != 0 || err != nil {
|
if (n != int(unsafe.Sizeof(err2)) && n != int(unsafe.Sizeof(childErr))) || childErr.Err != 0 || err != nil {
|
||||||
childErr.Err = handlePipeError(r1, childErr.Err)
|
childErr.Err = handlePipeError(n, childErr.Err)
|
||||||
goto fail
|
goto fail
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +116,7 @@ func syncWithChild(r *Runner, p [2]int, pid int, err1 syscall.Errno) (int, error
|
|||||||
n, err = readChildErr(p[0], &childErr)
|
n, err = readChildErr(p[0], &childErr)
|
||||||
unix.Close(p[0])
|
unix.Close(p[0])
|
||||||
if n != 0 || err != nil {
|
if n != 0 || err != nil {
|
||||||
childErr.Err = handlePipeError(r1, childErr.Err)
|
childErr.Err = handlePipeError(n, childErr.Err)
|
||||||
goto failAfterClose
|
goto failAfterClose
|
||||||
}
|
}
|
||||||
return int(pid), nil
|
return int(pid), nil
|
||||||
@ -154,8 +153,8 @@ func readlen(fd int, p *byte, np int) (n int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check pipe error
|
// check pipe error
|
||||||
func handlePipeError(r1 uintptr, errno syscall.Errno) syscall.Errno {
|
func handlePipeError(r1 int, errno syscall.Errno) syscall.Errno {
|
||||||
if r1 >= unsafe.Sizeof(errno) {
|
if uintptr(r1) >= unsafe.Sizeof(errno) {
|
||||||
return syscall.Errno(errno)
|
return syscall.Errno(errno)
|
||||||
}
|
}
|
||||||
return syscall.EPIPE
|
return syscall.EPIPE
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user