Skip to content

Commit

Permalink
abort_download() is OK in any state
Browse files Browse the repository at this point in the history
  • Loading branch information
arvidn committed Nov 14, 2024
1 parent bb08bdb commit 4b4003d
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
2 changes: 0 additions & 2 deletions src/piece_picker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3829,8 +3829,6 @@ namespace {
TORRENT_ASSERT(info.peer == nullptr || info.peer->in_use);
TORRENT_ASSERT(info.piece_index == block.piece_index);

TORRENT_ASSERT(info.state != block_info::state_none);

if (info.state != block_info::state_requested) return;

piece_pos const& p = m_piece_map[block.piece_index];
Expand Down
32 changes: 32 additions & 0 deletions test/test_piece_picker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,38 @@ TORRENT_TEST(piece_block)
TEST_CHECK(!(piece_block(zero, 1) < piece_block(zero, 1)));
}

TORRENT_TEST(abort_download_states)
{
auto p = setup_picker("1111111", " ", "7110000", "");

//aborting a block that isn't being downloaded is a no-op
TEST_CHECK(p->is_requested({3_piece, 0}) == false);
p->abort_download({3_piece, 0}, tmp_peer);
p->abort_download({3_piece, 1}, tmp_peer);
TEST_CHECK(p->is_requested({3_piece, 0}) == false);

// aborting a block that's downloading
p->mark_as_downloading({3_piece, 0}, tmp_peer);
TEST_CHECK(p->is_downloaded({3_piece, 0}) == false);
p->abort_download({3_piece, 0}, tmp_peer);
p->abort_download({3_piece, 1}, tmp_peer);
TEST_CHECK(p->is_downloaded({3_piece, 0}) == false);

// aborting a block that's finished is a no-op
p->mark_as_writing({3_piece, 0}, tmp_peer);
TEST_CHECK(p->is_downloaded({3_piece, 0}) == true);
p->abort_download({3_piece, 0}, tmp_peer);
p->abort_download({3_piece, 1}, tmp_peer);
TEST_CHECK(p->is_downloaded({3_piece, 0}) == true);

// aborting a block that's written is a no-op
p->mark_as_finished({3_piece, 0}, tmp_peer);
TEST_CHECK(p->is_finished({3_piece, 0}) == true);
p->abort_download({3_piece, 0}, tmp_peer);
p->abort_download({3_piece, 1}, tmp_peer);
TEST_CHECK(p->is_finished({3_piece, 0}) == true);
}

TORRENT_TEST(abort_download)
{
// test abort_download
Expand Down

0 comments on commit 4b4003d

Please sign in to comment.