1
0
mirror of https://github.com/rclone/rclone.git synced 2025-12-06 00:03:32 +00:00

cmount: Wait for mountpoint to appear on Windows before declaring mounted

This commit is contained in:
Nick Craig-Wood
2017-05-10 11:16:53 +01:00
parent e6ffe3464c
commit 204a19e67f
2 changed files with 17 additions and 5 deletions

View File

@@ -227,7 +227,7 @@ func mountOptions(device string, mountpoint string) (options []string) {
func mount(f fs.Fs, mountpoint string) (*mountlib.FS, <-chan error, func() error, error) {
fs.Debugf(f, "Mounting on %q", mountpoint)
// Check the mountpoint
// Check the mountpoint - in Windows the mountpoint musn't exist before the mount
if runtime.GOOS != "windows" {
fi, err := os.Stat(mountpoint)
if err != nil {
@@ -278,6 +278,22 @@ func mount(f fs.Fs, mountpoint string) (*mountlib.FS, <-chan error, func() error
case <-fsys.ready:
}
// Wait for the mount point to be available on Windows
// On Windows the Init signal comes slightly before the mount is ready
if runtime.GOOS == "windows" {
const totalWait = 10 * time.Second
const individualWait = 10 * time.Millisecond
for i := 0; i < int(totalWait/individualWait); i++ {
_, err := os.Stat(mountpoint)
if err == nil {
goto found
}
time.Sleep(10 * time.Millisecond)
}
fs.Errorf(nil, "mountpoint %q didn't became available after %v - continuing anyway", mountpoint, totalWait)
found:
}
return fsys.FS, errChan, unmount, nil
}