diff --git a/src/disk_io_thread.cpp b/src/disk_io_thread.cpp index ea5b23988..f9f1102c7 100644 --- a/src/disk_io_thread.cpp +++ b/src/disk_io_thread.cpp @@ -432,6 +432,7 @@ namespace libtorrent int pos = 0; int start = 0; int blocks_in_piece = 0; + int first_block = -1; if (avoid_readback) { // with the avoid read-back mode, only consider blocks @@ -446,7 +447,11 @@ namespace libtorrent for (int i = 0; i < blocks_in_piece; ++i) { - if (p.blocks[i].buf) ++current; + if (p.blocks[i].buf) + { + if (first_block == -1) first_block = i; + ++current; + } else { if (current > len) @@ -464,6 +469,12 @@ namespace libtorrent pos = start; } + if (avoid_readback && first_block >= 0 && p.next_block_to_hash - first_block > lower_limit) + { + len = flush_range(p, first_block, p.next_block_to_hash, l); + return len; + } + if (len < lower_limit || len <= 0) return 0; len = flush_range(p, pos, pos + len, l); return len;