aboutsummaryrefslogtreecommitdiff
path: root/src/os
diff options
context:
space:
mode:
authorAndy Pan <panjf2000@gmail.com>2024-03-14 13:03:00 +0800
committerGopher Robot <gobot@golang.org>2024-03-19 11:34:18 +0000
commit207511a0d4a7cc68ccad89f0a00ab51d6fc4ee08 (patch)
treee9d11895fb75fadb173b87c8763074fce4956093 /src/os
parentd14cf8f91b1b9ab5009737b03e6e23cc201cbc22 (diff)
downloadgo-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.go44
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}
}