@ -19,47 +19,31 @@
package fuse
package fuse
import (
import (
"context"
"fmt"
"fmt"
"github.com/ethereum/go-ethereum/log"
"os/exec"
"os/exec"
"runtime"
"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 {
switch runtime . GOOS {
case "darwin" :
case "darwin" :
cmd = exec . Command ( "/usr/bin/diskutil" , "umount" , "force" , mountPoint )
return exec . CommandContext ( ctx , "diskutil" , "umount" , "force" , mountPoint ) . Run ( )
case "linux" :
case "linux" :
cmd = exec . Command ( "fusermount" , "-u" , mountPoint )
return exec . CommandContext ( ctx , "fusermount" , "-u" , mountPoint ) . Run ( )
default :
default :
return fmt . Errorf ( "unmount: unimplemented" )
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 {
func addFileToSwarm ( sf * SwarmFile , content [ ] byte , size int ) error {