@cryptotaxi247 / kubo / commits / 6aa15ddb9

fixed close sync issue

Juan Batiz-Benet committed Sep 27, 2014 at 18:28 UTC 6aa15ddb945364cbfb04864e314e2d6bc8857bb4
2 files changed +15 -6
daemon/daemon.go
+14 -5
@@ -7,13 +7,14 @@ import (
7 "net"
8 "os"
9 "path"
10 + "sync"
11
12 core "github.com/jbenet/go-ipfs/core"
13 "github.com/jbenet/go-ipfs/core/commands"
14 u "github.com/jbenet/go-ipfs/util"
15 logging "github.com/op/go-logging"
16
16 - "github.com/camlistore/lock"
17 + lock "github.com/camlistore/lock"
18 ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
19 )
20
@@ -28,6 +29,7 @@ type DaemonListener struct {
29 node *core.IpfsNode
30 list net.Listener
31 closed bool
32 + wg sync.WaitGroup
33 lk io.Closer
34 }
35
@@ -88,13 +90,17 @@ func NewCommand() *Command {
90 }
91
92 func (dl *DaemonListener) Listen() {
91 - fmt.Println("listen.")
93 + if dl.closed {
94 + panic("attempting to listen on a closed daemon Listener")
95 + }
96 +
97 + dl.wg.Add(1)
98 + log.Info("daemon listening")
99 for {
100 conn, err := dl.list.Accept()
94 - fmt.Println("Loop!")
101 if err != nil {
102 if !dl.closed {
97 - u.PErr("DaemonListener Accept: %v\n", err)
103 + log.Warning("DaemonListener Accept: %v", err)
104 }
105 dl.lk.Close()
106 return
@@ -135,7 +141,10 @@ func (dl *DaemonListener) handleConnection(conn net.Conn) {
141
142 func (dl *DaemonListener) Close() error {
143 dl.closed = true
138 - return dl.list.Close()
144 + err := dl.list.Close()
145 + dl.wg.Wait() // wait till done before releasing lock.
146 + dl.lk.Close()
147 + return err
148 }
149
150 func daemonLock(confdir string) (io.Closer, error) {
daemon/daemon_test.go
+1 -1
@@ -63,7 +63,7 @@ func TestInitializeDaemonListener(t *testing.T) {
63 if err != nil {
64 t.Fatal(err)
65 }
66 - dl, initErr := NewDaemonListener(node, addr)
66 + dl, initErr := NewDaemonListener(node, addr, ".")
67 if initErr != nil {
68 t.Fatal(initErr)
69 }