swarm/fuse: simplify externalUnmount
The code looked for /usr/bin/diskutil on darwin, but it's actually located in /usr/sbin. Fix that by not specifying the absolute path. Also remove weird timeout construction and extra whitespace.
This commit is contained in:
parent
693d9ccbfb
commit
50c18e6eb8
|
@ -19,18 +19,19 @@
|
|||
package fuse
|
||||
|
||||
import (
|
||||
"bazil.org/fuse"
|
||||
"bazil.org/fuse/fs"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/swarm/api"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"bazil.org/fuse"
|
||||
"bazil.org/fuse/fs"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/swarm/api"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -203,7 +204,7 @@ func (self *SwarmFS) Unmount(mountpoint string) (*MountInfo, error) {
|
|||
}
|
||||
err = fuse.Unmount(cleanedMountPoint)
|
||||
if err != nil {
|
||||
err1 := externalUnMount(cleanedMountPoint)
|
||||
err1 := externalUnmount(cleanedMountPoint)
|
||||
if err1 != nil {
|
||||
errStr := fmt.Sprintf("UnMount error: %v", err)
|
||||
log.Warn(errStr)
|
||||
|
|
|
@ -19,47 +19,31 @@
|
|||
package fuse
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
)
|
||||
|
||||
func externalUnMount(mountPoint string) error {
|
||||
|
||||
var cmd *exec.Cmd
|
||||
func externalUnmount(mountPoint string) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), unmountTimeout)
|
||||
defer cancel()
|
||||
|
||||
// Try generic umount.
|
||||
if err := exec.CommandContext(ctx, "umount", mountPoint).Run(); err == nil {
|
||||
return nil
|
||||
}
|
||||
// Try FUSE-specific commands if umount didn't work.
|
||||
switch runtime.GOOS {
|
||||
|
||||
case "darwin":
|
||||
cmd = exec.Command("/usr/bin/diskutil", "umount", "force", mountPoint)
|
||||
|
||||
return exec.CommandContext(ctx, "diskutil", "umount", "force", mountPoint).Run()
|
||||
case "linux":
|
||||
cmd = exec.Command("fusermount", "-u", mountPoint)
|
||||
|
||||
return exec.CommandContext(ctx, "fusermount", "-u", mountPoint).Run()
|
||||
default:
|
||||
return fmt.Errorf("unmount: unimplemented")
|
||||
}
|
||||
|
||||
errc := make(chan error, 1)
|
||||
go func() {
|
||||
defer close(errc)
|
||||
|
||||
if err := exec.Command("umount", mountPoint).Run(); err == nil {
|
||||
return
|
||||
}
|
||||
errc <- cmd.Run()
|
||||
}()
|
||||
|
||||
select {
|
||||
|
||||
case <-time.After(unmountTimeout):
|
||||
return fmt.Errorf("umount timeout")
|
||||
|
||||
case err := <-errc:
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
func addFileToSwarm(sf *SwarmFile, content []byte, size int) error {
|
||||
|
|
Loading…
Reference in New Issue