]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Tighten up some potential leaks
authorMatt Joiner <anacrolix@gmail.com>
Mon, 3 Aug 2015 15:15:09 +0000 (01:15 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 3 Aug 2015 15:15:09 +0000 (01:15 +1000)
Based on some observations of lingering goroutines in unit tests.

client.go

index f5a52449b3d0ac5760c0d94bc6d605d911ca4439..efa41e2c050922c71aebe24dc2840c3f67726394 100644 (file)
--- a/client.go
+++ b/client.go
@@ -551,14 +551,22 @@ func (cl *Client) stopped() bool {
 func (me *Client) Close() {
        me.mu.Lock()
        defer me.mu.Unlock()
+       select {
+       case <-me.quit:
+               return
+       default:
+       }
        close(me.quit)
+       if me.dHT != nil {
+               me.dHT.Close()
+       }
        for _, l := range me.listeners {
                l.Close()
        }
-       me.event.Broadcast()
        for _, t := range me.torrents {
                t.close()
        }
+       me.event.Broadcast()
 }
 
 var ipv6BlockRange = iplist.Range{Description: "non-IPv4 address"}
@@ -586,6 +594,11 @@ func (cl *Client) waitAccept() {
                                return
                        }
                }
+               select {
+               case <-cl.quit:
+                       return
+               default:
+               }
                cl.event.Wait()
        }
 }