// are okay.
 type messageWriter func(pp.Message) bool
 
+// Proxies the messageWriter's response.
 func (cn *connection) request(r request, mw messageWriter) bool {
        if cn.requests == nil {
                cn.requests = make(map[request]struct{}, cn.nominalMaxRequests())
                panic("requesting piece peer doesn't have")
        }
        cn.requests[r] = struct{}{}
+       if _, ok := cn.t.conns[cn]; !ok {
+               panic("requesting but not in active conns")
+       }
        cn.t.pendingRequests[r]++
        return mw(pp.Message{
                Type:   pp.Request,
        defer cn.Close()
        defer keepAliveTimer.Stop()
        for {
+               if cn.closed.IsSet() {
+                       return
+               }
                buf.Write(cn.postedBuffer.Bytes())
                cn.postedBuffer.Reset()
                if buf.Len() == 0 {
 
 
 // Returns true if connection is removed from torrent.Conns.
 func (t *Torrent) deleteConnection(c *connection) (ret bool) {
+       if !c.closed.IsSet() {
+               panic("connection is not closed")
+               // There are behaviours prevented by the closed state that will fail
+               // if the connection has been deleted.
+       }
        _, ret = t.conns[c]
        delete(t.conns, c)
        c.deleteAllRequests()