Skip to content

Commit

Permalink
swarm/fuse: simplify externalUnmount
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
fjl committed Jun 21, 2017
1 parent 693d9cc commit 50c18e6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 35 deletions.
13 changes: 7 additions & 6 deletions swarm/fuse/swarmfs_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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)
Expand Down
42 changes: 13 additions & 29 deletions swarm/fuse/swarmfs_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,47 +19,31 @@
package fuse

import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/log"
"os/exec"
"runtime"
"time"
)

func externalUnMount(mountPoint string) error {
"github.com/ethereum/go-ethereum/log"
)

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 {
Expand Down

0 comments on commit 50c18e6

Please sign in to comment.