From: Andy Pan Date: Thu, 14 Mar 2024 05:03:00 +0000 (+0800) Subject: os: use ignoringEINTR in openFileNolog and openDirNolog X-Git-Tag: go1.23rc1~837 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=207511a0d4a7cc68ccad89f0a00ab51d6fc4ee08;p=gostls13.git os: use ignoringEINTR in openFileNolog and openDirNolog Change-Id: Ie8fa25d5e326efd7d3c9b72203783110d9e22ce8 Reviewed-on: https://go-review.googlesource.com/c/go/+/572215 Reviewed-by: David Chase Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- 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} }