diff --git a/libtransmission/torrent.cc b/libtransmission/torrent.cc index 6cb5b7745..6a20157d6 100644 --- a/libtransmission/torrent.cc +++ b/libtransmission/torrent.cc @@ -498,15 +498,18 @@ void tr_torrent::set_unique_queue_position(size_t const new_pos) { using namespace queue_helpers; - auto current = size_t{}; + auto max_pos = size_t{}; auto const old_pos = queue_position_; - queue_position_ = MaxQueuePosition; - auto& torrents = session->torrents(); for (auto* const walk : torrents) { - if ((old_pos < new_pos) && (old_pos <= walk->queue_position_) && (walk->queue_position_ <= new_pos)) + if (walk == this) + { + continue; + } + + if ((old_pos < new_pos) && (old_pos < walk->queue_position_) && (walk->queue_position_ <= new_pos)) { --walk->queue_position_; walk->mark_changed(); @@ -518,10 +521,10 @@ void tr_torrent::set_unique_queue_position(size_t const new_pos) walk->mark_changed(); } - current = std::max(current, walk->queue_position_ + 1U); + max_pos = std::max(max_pos, walk->queue_position_); } - queue_position_ = std::min(new_pos, current); + queue_position_ = std::min(new_pos, max_pos + 1); mark_changed(); TR_ASSERT(torrents_are_sorted_by_queue_position(torrents.get_all()));