func (m *mount) mount() error { log.Infof("Mounting %s", m.MountPoint()) errs := make(chan error, 1) go func() { // fs.Serve blocks until the filesystem is unmounted. err := fs.Serve(m.fuseConn, m.filesys) log.Debugf("%s is unmounted", m.MountPoint()) if err != nil { log.Debugf("fs.Serve returned (%s)", err) errs <- err } m.setActive(false) }() // wait for the mount process to be done, or timed out. select { case <-time.After(MountTimeout): return fmt.Errorf("Mounting %s timed out.", m.MountPoint()) case err := <-errs: return err case <-m.fuseConn.Ready: } // check if the mount process has an error to report if err := m.fuseConn.MountError; err != nil { return err } m.setActive(true) log.Infof("Mounted %s", m.MountPoint()) return nil }
func main() { flag.Usage = Usage flag.Parse() if flag.NArg() != 1 { Usage() os.Exit(2) } mountpoint := flag.Arg(0) c, err := fuse.Mount( mountpoint, fuse.FSName("helloworld"), fuse.Subtype("hellofs"), fuse.LocalVolume(), fuse.VolumeName("Hello world!"), ) if err != nil { log.Fatal(err) } defer c.Close() err = fs.Serve(c, FS{}) if err != nil { log.Fatal(err) } // check if the mount process has an error to report <-c.Ready if err := c.MountError; err != nil { log.Fatal(err) } }
func (m *mount) mount() error { log.Infof("Mounting %s", m.MountPoint()) errs := make(chan error, 1) go func() { err := fs.Serve(m.fuseConn, m.filesys) log.Debugf("Mounting %s -- fs.Serve returned (%s)", err) if err != nil { errs <- err } }() // wait for the mount process to be done, or timed out. select { case <-time.After(MountTimeout): return fmt.Errorf("Mounting %s timed out.", m.MountPoint()) case err := <-errs: return err case <-m.fuseConn.Ready: } // check if the mount process has an error to report if err := m.fuseConn.MountError; err != nil { return err } log.Infof("Mounted %s", m.MountPoint()) return nil }