Index: src/download/download_wrapper.cc =================================================================== --- src/download/download_wrapper.cc (revision 612) +++ src/download/download_wrapper.cc (working copy) @@ -454,6 +454,9 @@ void DownloadWrapper::receive_update_priorities() { + if (m_main.chunk_selector()->empty()) + return; + m_main.chunk_selector()->high_priority()->clear(); m_main.chunk_selector()->normal_priority()->clear(); Index: src/download/chunk_selector.cc =================================================================== --- src/download/chunk_selector.cc (revision 612) +++ src/download/chunk_selector.cc (working copy) @@ -66,6 +66,9 @@ // modified. void ChunkSelector::update_priorities() { + if (empty()) + return; + if (m_position == invalid_chunk) m_position = std::rand() % size(); @@ -151,7 +154,7 @@ inline uint32_t ChunkSelector::search_range(const BitField* bf, uint32_t first, uint32_t last) { if (first >= last || last > size()) - throw internal_error("ChunkSelector::find_range(...) received an invalid range."); + throw internal_error("ChunkSelector::search_range(...) received an invalid range."); BitField::const_iterator local = m_bitfield.begin() + first / 8; BitField::const_iterator source = bf->begin() + first / 8; Index: src/download/chunk_selector.h =================================================================== --- src/download/chunk_selector.h (revision 610) +++ src/download/chunk_selector.h (working copy) @@ -61,6 +61,7 @@ static const uint32_t invalid_chunk = ~(uint32_t)0; + bool empty() const { return size() == 0; } uint32_t size() const { return m_bitfield.size_bits(); } const BitField* bitfield() { return &m_bitfield; }