cmd/torrent/download.go | 16 +++++++++------- diff --git a/cmd/torrent/download.go b/cmd/torrent/download.go index 6df12216b14d7f961221da2e9090d85a71b49e05..927b22bf03acf941a61ad337ae2189e23d1073ac 100644 --- a/cmd/torrent/download.go +++ b/cmd/torrent/download.go @@ -195,22 +195,24 @@ func waitForPieces(ctx context.Context, t *torrent.Torrent, beginIndex, endIndex int) { sub := t.SubscribePieceStateChanges() defer sub.Close() - pending := make(map[int]struct{}) - for i := beginIndex; i < endIndex; i++ { - pending[i] = struct{}{} - } expected := storage.Completion{ Complete: true, Ok: true, } + pending := make(map[int]struct{}) + for i := beginIndex; i < endIndex; i++ { + if t.Piece(i).State().Completion != expected { + pending[i] = struct{}{} + } + } for { + if len(pending) == 0 { + return + } select { case ev := <-sub.Values: if ev.Completion == expected { delete(pending, ev.Index) - } - if len(pending) == 0 { - return } case <-ctx.Done(): return