mirror of
https://github.com/golang/go
synced 2024-11-27 04:21:24 -07:00
os: have RemoveAll loop on EINTR
Fixes #57966 Change-Id: Ia732d499ff9bd6e70030daab8fac42d1e204be37 Reviewed-on: https://go-review.googlesource.com/c/go/+/463076 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Nigel Tao <nigeltao@golang.org> Reviewed-by: Nigel Tao (INACTIVE; USE @golang.org INSTEAD) <nigeltao@google.com>
This commit is contained in:
parent
e216ee7e74
commit
a11b8e3765
@ -58,7 +58,9 @@ func removeAll(path string) error {
|
||||
func removeAllFrom(parent *File, base string) error {
|
||||
parentFd := int(parent.Fd())
|
||||
// Simple case: if Unlink (aka remove) works, we're done.
|
||||
err := unix.Unlinkat(parentFd, base, 0)
|
||||
err := ignoringEINTR(func() error {
|
||||
return unix.Unlinkat(parentFd, base, 0)
|
||||
})
|
||||
if err == nil || IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
@ -75,7 +77,9 @@ func removeAllFrom(parent *File, base string) error {
|
||||
|
||||
// Is this a directory we need to recurse into?
|
||||
var statInfo syscall.Stat_t
|
||||
statErr := unix.Fstatat(parentFd, base, &statInfo, unix.AT_SYMLINK_NOFOLLOW)
|
||||
statErr := ignoringEINTR(func() error {
|
||||
return unix.Fstatat(parentFd, base, &statInfo, unix.AT_SYMLINK_NOFOLLOW)
|
||||
})
|
||||
if statErr != nil {
|
||||
if IsNotExist(statErr) {
|
||||
return nil
|
||||
@ -151,7 +155,9 @@ func removeAllFrom(parent *File, base string) error {
|
||||
}
|
||||
|
||||
// Remove the directory itself.
|
||||
unlinkError := unix.Unlinkat(parentFd, base, unix.AT_REMOVEDIR)
|
||||
unlinkError := ignoringEINTR(func() error {
|
||||
return unix.Unlinkat(parentFd, base, unix.AT_REMOVEDIR)
|
||||
})
|
||||
if unlinkError == nil || IsNotExist(unlinkError) {
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user