From 207511a0d4a7cc68ccad89f0a00ab51d6fc4ee08 Mon Sep 17 00:00:00 2001
From: Andy Pan <panjf2000@gmail.com>
Date: Thu, 14 Mar 2024 13:03:00 +0800
Subject: [PATCH] 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>
---
 src/os/file_unix.go | 44 +++++++++++++++++++-------------------------
 1 file changed, 19 insertions(+), 25 deletions(-)

diff --git a/src/os/file_unix.go b/src/os/file_unix.go
index 924ec25ed91..5c45014ae5c 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}
 	}
 
-- 
GitLab