]> Cypherpunks repositories - gostls13.git/commitdiff
os: use ignoringEINTR in openFileNolog and openDirNolog
authorAndy Pan <panjf2000@gmail.com>
Thu, 14 Mar 2024 05:03:00 +0000 (13:03 +0800)
committerGopher Robot <gobot@golang.org>
Tue, 19 Mar 2024 11:34:18 +0000 (11:34 +0000)
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>

src/os/file_unix.go

index 924ec25ed911739b2753785c85f96aa54e2ee571..5c45014ae5cad27069dfd6e24b18567ef2a83d50 100644 (file)
@@ -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}
        }