github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/backend/local/remove_windows.go (about) 1 //+build windows 2 3 package local 4 5 import ( 6 "os" 7 "syscall" 8 "time" 9 10 "github.com/rclone/rclone/fs" 11 ) 12 13 const ( 14 ERROR_SHARING_VIOLATION syscall.Errno = 32 15 ) 16 17 // Removes name, retrying on a sharing violation 18 func remove(name string) (err error) { 19 const maxTries = 10 20 var sleepTime = 1 * time.Millisecond 21 for i := 0; i < maxTries; i++ { 22 err = os.Remove(name) 23 if err == nil { 24 break 25 } 26 pathErr, ok := err.(*os.PathError) 27 if !ok { 28 break 29 } 30 if pathErr.Err != ERROR_SHARING_VIOLATION { 31 break 32 } 33 fs.Logf(name, "Remove detected sharing violation - retry %d/%d sleeping %v", i+1, maxTries, sleepTime) 34 time.Sleep(sleepTime) 35 sleepTime <<= 1 36 } 37 return err 38 }