diff --git a/src/os/file_unix.go b/src/os/file_unix.go index 924ec25ed911739b2753785c85f96aa54e2ee571..5c45014ae5cad27069dfd6e24b18567ef2a83d50 100644 --- a/src/os/file_unix.go +++ b/src/os/file_unix.go @@ -265,20 +265,17 @@ func openFileNolog(name string, flag int, perm FileMode) (*File, error) { } } - var r int - var s poll.SysFile - for { - var e error + var ( + r int + s poll.SysFile + e error + ) + // We have to check EINTR here, per issues 11180 and 39237. + ignoringEINTR(func() error { r, s, e = open(name, flag|syscall.O_CLOEXEC, syscallMode(perm)) - if e == nil { - break - } - - // We have to check EINTR here, per issues 11180 and 39237. - if e == syscall.EINTR { - continue - } - + return e + }) + if e != nil { return nil, &PathError{Op: "open", Path: name, Err: e} } @@ -304,19 +301,16 @@ func openFileNolog(name string, flag int, perm FileMode) (*File, error) { } func openDirNolog(name string) (*File, error) { - var r int - var s poll.SysFile - for { - var e error + var ( + r int + s poll.SysFile + e error + ) + ignoringEINTR(func() error { r, s, e = open(name, O_RDONLY|syscall.O_CLOEXEC, 0) - if e == nil { - break - } - - if e == syscall.EINTR { - continue - } - + return e + }) + if e != nil { return nil, &PathError{Op: "open", Path: name, Err: e} }