use waitgroup for parallel fuse mounting logic

License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
This commit is contained in:
Jeromy 2017-09-01 15:27:46 -07:00
parent c5f8a0c11d
commit 2f957ce7f7

View File

@ -7,6 +7,7 @@ import (
"errors"
"fmt"
"strings"
"sync"
core "github.com/ipfs/go-ipfs/core"
ipns "github.com/ipfs/go-ipfs/fuse/ipns"
@ -63,28 +64,26 @@ func doMount(node *core.IpfsNode, fsdir, nsdir string) error {
}
// this sync stuff is so that both can be mounted simultaneously.
var fsmount mount.Mount
var nsmount mount.Mount
var err1 error
var err2 error
var fsmount, nsmount mount.Mount
var err1, err2 error
done := make(chan struct{})
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
fsmount, err1 = rofs.Mount(node, fsdir)
done <- struct{}{}
}()
if node.OnlineMode() {
wg.Add(1)
go func() {
defer wg.Done()
nsmount, err2 = ipns.Mount(node, nsdir, fsdir)
done <- struct{}{}
}()
<-done
}
<-done
wg.Wait()
if err1 != nil {
log.Errorf("error mounting: %s", err1)