]> Sergey Matveev's repositories - btrtrc.git/commitdiff
It looks like Torrent.worstBadConn was returning an arbitrary bad connection, it...
authorMatt Joiner <anacrolix@gmail.com>
Thu, 21 Sep 2017 09:32:03 +0000 (19:32 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 21 Sep 2017 09:32:03 +0000 (19:32 +1000)
heap.Init got lost somewhere along the way? Need a unit test for this.

torrent.go

index 641f8fc078a1c44e5f0b9c4c2460acffa6334744..cb838ef4e1ae3c8c451b5a906f499e3363e6cc18 100644 (file)
@@ -204,7 +204,7 @@ func (t *Torrent) addrActive(addr string) bool {
        return false
 }
 
-func (t *Torrent) worstUnclosedConns() (ret []*connection) {
+func (t *Torrent) unclosedConnsAsSlice() (ret []*connection) {
        ret = make([]*connection, 0, len(t.conns))
        for c := range t.conns {
                if !c.closed.IsSet() {
@@ -758,7 +758,8 @@ func (t *Torrent) wantPieceIndex(index int) bool {
 // pieces, or has been in worser half of the established connections for more
 // than a minute.
 func (t *Torrent) worstBadConn() *connection {
-       wcs := worseConnSlice{t.worstUnclosedConns()}
+       wcs := worseConnSlice{t.unclosedConnsAsSlice()}
+       heap.Init(&wcs)
        for wcs.Len() != 0 {
                c := heap.Pop(&wcs).(*connection)
                if c.UnwantedChunksReceived >= 6 && c.UnwantedChunksReceived > c.UsefulChunksReceived {