Browse Source

lib/fs: Ignore directory fsync failures

Audrius Butkevicius 8 years ago
parent
commit
5ec1490be0
1 changed files with 9 additions and 4 deletions
  1. 9 4
      lib/fs/basicfs.go

+ 9 - 4
lib/fs/basicfs.go

@@ -319,13 +319,18 @@ 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"
+	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 err != nil && (runtime.GOOS != "windows" || !strings.Contains(err.Error(), "handle is invalid")) {
-		return err
+	if stat, serr := f.Stat(); serr != nil {
+		return serr
+	} else if stat.IsDir() {
+		return nil
 	}
-	return nil
+	return err
 }
 
 // fsFileInfo implements the fs.FileInfo interface on top of an os.FileInfo.