func (c *connection) Close() {
c.closed.Set()
c.discardPieceInclination()
+ c.pieceRequestOrder.Clear()
// TODO: This call blocks sometimes, why?
go c.conn.Close()
}
// Writes buffers to the socket from the write channel.
func (conn *connection) writer() {
+ defer func() {
+ conn.t.cl.mu.Lock()
+ defer conn.t.cl.mu.Unlock()
+ conn.Close()
+ }()
// Reduce write syscalls.
buf := bufio.NewWriter(conn.rw)
for {
connectionWriterWrite.Add(1)
_, err := buf.Write(b)
if err != nil {
- conn.Close()
return
}
case <-conn.closed.C():
connectionWriterWrite.Add(1)
_, err := buf.Write(b)
if err != nil {
- conn.Close()
return
}
case <-conn.closed.C():
connectionWriterFlush.Add(1)
err := buf.Flush()
if err != nil {
- conn.Close()
return
}
}