]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Rework locking in Client.acceptConnections
authorMatt Joiner <anacrolix@gmail.com>
Tue, 5 Jul 2016 14:38:43 +0000 (00:38 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 5 Jul 2016 14:38:43 +0000 (00:38 +1000)
client.go

index 9a22320451a0e67e36e59a99b87349799af1a964..f8c42bebf4ea29d89311a77341a144d56beda9e1 100644 (file)
--- a/client.go
+++ b/client.go
@@ -378,8 +378,6 @@ func (cl *Client) ipBlockRange(ip net.IP) (r iplist.Range, blocked bool) {
 }
 
 func (cl *Client) waitAccept() {
-       cl.mu.Lock()
-       defer cl.mu.Unlock()
        for {
                for _, t := range cl.torrents {
                        if t.wantConns() {
@@ -394,10 +392,14 @@ func (cl *Client) waitAccept() {
 }
 
 func (cl *Client) acceptConnections(l net.Listener, utp bool) {
+       cl.mu.Lock()
+       defer cl.mu.Unlock()
        for {
                cl.waitAccept()
+               cl.mu.Unlock()
                conn, err := l.Accept()
                conn = pproffd.WrapNetConn(conn)
+               cl.mu.Lock()
                if cl.closed.IsSet() {
                        if conn != nil {
                                conn.Close()
@@ -415,11 +417,9 @@ func (cl *Client) acceptConnections(l net.Listener, utp bool) {
                } else {
                        acceptTCP.Add(1)
                }
-               cl.mu.RLock()
                reject := cl.badPeerIPPort(
                        missinggo.AddrIP(conn.RemoteAddr()),
                        missinggo.AddrPort(conn.RemoteAddr()))
-               cl.mu.RUnlock()
                if reject {
                        acceptReject.Add(1)
                        conn.Close()