From 35b224ba362af711077f2c80ae17e9fbd50d1730 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 15 Feb 2018 15:21:51 +1100 Subject: [PATCH] Add extra pedantic checks to requesting to try and flush out @deranjer's panics --- connection.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/connection.go b/connection.go index 235d0430..f70e0848 100644 --- a/connection.go +++ b/connection.go @@ -420,10 +420,12 @@ func (cn *connection) request(r request, mw messageWriter) bool { if !cn.PeerHasPiece(r.Index.Int()) { 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") } + if cn.closed.IsSet() { + panic("requesting when connection is closed") + } if cn.PeerChoked { if cn.peerAllowedFast.Get(int(r.Index)) { torrent.Add("allowed fast requests sent", 1) @@ -431,6 +433,7 @@ func (cn *connection) request(r request, mw messageWriter) bool { panic("requesting while choked and not allowed fast") } } + cn.requests[r] = struct{}{} cn.t.pendingRequests[r]++ return mw(pp.Message{ Type: pp.Request, @@ -1384,6 +1387,9 @@ func (c *connection) deleteAllRequests() { for r := range c.requests { c.deleteRequest(r) } + if len(c.requests) != 0 { + panic(len(c.requests)) + } // for c := range c.t.conns { // c.tickleWriter() // }