lib/fs: Ignore directory fsync failures

This commit is contained in:
Audrius Butkevicius 2017-09-23 15:19:34 +01:00 committed by Jakob Borg
parent 2760d032ca
commit 5ec1490be0

View File

@ -319,14 +319,19 @@ func (f fsFile) Stat() (FileInfo, error) {
func (f fsFile) Sync() error {
err := f.File.Sync()
// On Windows, fsyncing a directory returns a "handle is invalid"
// So we swallow that and let things go through in order not to have to add
// a separate way of syncing directories versus files.
if err != nil && (runtime.GOOS != "windows" || !strings.Contains(err.Error(), "handle is invalid")) {
if err == nil || runtime.GOOS != "windows" {
return err
}
// On Windows, fsyncing a directory returns a "handle is invalid" (localized so can't check for strings)
// So we swallow that and let things go through in order not to have to add
// a separate way of syncing directories versus files.
if stat, serr := f.Stat(); serr != nil {
return serr
} else if stat.IsDir() {
return nil
}
return err
}
// fsFileInfo implements the fs.FileInfo interface on top of an os.FileInfo.
type fsFileInfo struct {