diff options
author | Andy Pan <panjf2000@gmail.com> | 2024-03-14 13:03:00 +0800 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2024-03-19 11:34:18 +0000 |
commit | 207511a0d4a7cc68ccad89f0a00ab51d6fc4ee08 (patch) | |
tree | e9d11895fb75fadb173b87c8763074fce4956093 /src/os | |
parent | d14cf8f91b1b9ab5009737b03e6e23cc201cbc22 (diff) | |
download | go-207511a0d4a7cc68ccad89f0a00ab51d6fc4ee08.tar.gz go-207511a0d4a7cc68ccad89f0a00ab51d6fc4ee08.zip |
os: use ignoringEINTR in openFileNolog and openDirNolog
Change-Id: Ie8fa25d5e326efd7d3c9b72203783110d9e22ce8
Reviewed-on: https://go-review.googlesource.com/c/go/+/572215
Reviewed-by: David Chase <drchase@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/os')
-rw-r--r-- | src/os/file_unix.go | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/src/os/file_unix.go b/src/os/file_unix.go index 924ec25ed9..5c45014ae5 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} } |