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
	
	Block a user