From: Matt Joiner Date: Tue, 5 Jul 2016 14:38:43 +0000 (+1000) Subject: Rework locking in Client.acceptConnections X-Git-Tag: v1.0.0~667 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=38048672a77f9387ab28e2912219821203e3c939;p=btrtrc.git Rework locking in Client.acceptConnections --- diff --git a/client.go b/client.go index 9a223204..f8c42beb 100644 --- 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()