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