use waitgroup for parallel fuse mounting logic
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Sep 1, 2017 at 15:27 UTC
2f957ce7f7ab3b481057186ea42ee0ea06eeefcb
1 file changed
+9
-10
fuse/node/mount_unix.go
+9
-10
@@ -7,6 +7,7 @@ import (
7
"errors"
8
"fmt"
9
"strings"
10
+ "sync"
11
12
core "github.com/ipfs/go-ipfs/core"
13
ipns "github.com/ipfs/go-ipfs/fuse/ipns"
@@ -63,28 +64,26 @@ func doMount(node *core.IpfsNode, fsdir, nsdir string) error {
64
}
65
66
// this sync stuff is so that both can be mounted simultaneously.
66
- var fsmount mount.Mount
67
- var nsmount mount.Mount
68
- var err1 error
69
- var err2 error
67
+ var fsmount, nsmount mount.Mount
68
+ var err1, err2 error
69
71
- done := make(chan struct{})
70
+ var wg sync.WaitGroup
71
72
+ wg.Add(1)
73
go func() {
74
+ defer wg.Done()
75
fsmount, err1 = rofs.Mount(node, fsdir)
75
- done <- struct{}{}
76
}()
77
78
if node.OnlineMode() {
79
+ wg.Add(1)
80
go func() {
81
+ defer wg.Done()
82
nsmount, err2 = ipns.Mount(node, nsdir, fsdir)
81
- done <- struct{}{}
83
}()
83
-
84
- <-done
84
}
85
87
- <-done
86
+ wg.Wait()
87
88
if err1 != nil {
89
log.Errorf("error mounting: %s", err1)