From a512c0df61927029978c600ebc9e6e7e26f89667 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 4 Jan 2023 01:25:57 +1100 Subject: [PATCH] Add a check that piece request order items are scanned in order It's not clear from btree documentation that scan should be ordered. --- request-strategy/order.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/request-strategy/order.go b/request-strategy/order.go index 3b7284b2..b009a108 100644 --- a/request-strategy/order.go +++ b/request-strategy/order.go @@ -4,6 +4,7 @@ import ( "bytes" "expvar" + "github.com/anacrolix/generics" "github.com/anacrolix/multiless" "github.com/anacrolix/torrent/metainfo" @@ -54,7 +55,16 @@ func GetRequestablePieces( storageLeft = &cap } var allTorrentsUnverifiedBytes int64 + var lastItem generics.Option[pieceRequestOrderItem] pro.tree.Scan(func(_i pieceRequestOrderItem) bool { + // Check that scan emits pieces in priority order. + if lastItem.Ok { + if _i.Less(&lastItem.Value) { + panic("scan not in order") + } + } + lastItem.Set(_i) + ih := _i.key.InfoHash var t = input.Torrent(ih) pieceLength := t.PieceLength() -- 2.48.1