From 204a19e67f7856f9f12dbd85146b89d24797645e Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Wed, 10 May 2017 11:16:53 +0100 Subject: [PATCH] cmount: Wait for mountpoint to appear on Windows before declaring mounted --- cmd/cmount/mount.go | 18 +++++++++++++++++- cmd/mountlib/mounttest/fs.go | 4 ---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/cmd/cmount/mount.go b/cmd/cmount/mount.go index c462fafa0..1f4fe61cd 100644 --- a/cmd/cmount/mount.go +++ b/cmd/cmount/mount.go @@ -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 } diff --git a/cmd/mountlib/mounttest/fs.go b/cmd/mountlib/mounttest/fs.go index 9fe05cd5c..5eb024195 100644 --- a/cmd/mountlib/mounttest/fs.go +++ b/cmd/mountlib/mounttest/fs.go @@ -13,7 +13,6 @@ import ( "runtime" "strings" "testing" - "time" "github.com/ncw/rclone/cmd/mountlib" "github.com/ncw/rclone/fs" @@ -141,9 +140,6 @@ func (r *Run) mount() { r.skip = true } log.Printf("mount OK") - if runtime.GOOS == "windows" { - time.Sleep(time.Second) // FIXME remove this when https://github.com/billziss-gh/cgofuse/issues/11 is fixed - } } func (r *Run) umount() {