From: Matt Joiner <anacrolix@gmail.com>
Date: Mon, 3 Aug 2015 15:15:09 +0000 (+1000)
Subject: Tighten up some potential leaks
X-Git-Tag: v1.0.0~1088
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=f69c51bea3d6f787cd750b33e9ca1b00f2047a56;p=btrtrc.git

Tighten up some potential leaks

Based on some observations of lingering goroutines in unit tests.
---

diff --git a/client.go b/client.go
index f5a52449..efa41e2c 100644
--- 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()
 	}
 }