}
func (me *Client) Stop() {
+ me.Lock()
close(me.quit)
me.event.Broadcast()
for _, t := range me.torrents {
c.Close()
}
}
+ me.Unlock()
}
func (cl *Client) acceptConnections() {
write: make(chan []byte),
post: make(chan encoding.BinaryMarshaler),
}
- defer conn.Close()
+ defer func() {
+ // There's a lock and deferred unlock later in this function. The
+ // client will not be locked when this deferred is invoked.
+ me.mu.Lock()
+ defer me.mu.Unlock()
+ conn.Close()
+ }()
go conn.writer()
go conn.writeOptimizer()
conn.post <- peer_protocol.Bytes(peer_protocol.Protocol)