mirror of
https://github.com/transmission/transmission
synced 2025-01-02 21:16:04 +00:00
fix: assert failure when moving torrents to bottom of the queue (#6751)
This commit is contained in:
parent
bc7d447949
commit
8944e587f9
1 changed files with 9 additions and 6 deletions
|
@ -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()));
|
||||
|
|
Loading…
Reference in a new issue