diff --git a/include/libtorrent/peer_connection.hpp b/include/libtorrent/peer_connection.hpp index c14043c4b..11448e143 100644 --- a/include/libtorrent/peer_connection.hpp +++ b/include/libtorrent/peer_connection.hpp @@ -590,6 +590,8 @@ namespace libtorrent bool packet_finished() const { return m_packet_size <= m_recv_pos; } + int receive_pos() const { return m_recv_pos; } + #ifdef TORRENT_DEBUG bool piece_failed; #endif @@ -649,9 +651,9 @@ namespace libtorrent { TORRENT_ASSERT(!m_disk_recv_buffer); TORRENT_ASSERT(m_disk_recv_buffer_size == 0); - if (m_recv_buffer.empty()) return buffer::interval(0,0); + int rcv_pos = (std::min)(m_recv_pos, int(m_recv_buffer.size())); return buffer::interval(&m_recv_buffer[0] - , &m_recv_buffer[0] + m_recv_pos); + , &m_recv_buffer[0] + rcv_pos); } std::pair wr_recv_buffers(int bytes); @@ -659,9 +661,9 @@ namespace libtorrent buffer::const_interval receive_buffer() const { - if (m_recv_buffer.empty()) return buffer::const_interval(0,0); + int rcv_pos = (std::min)(m_recv_pos, int(m_recv_buffer.size())); return buffer::const_interval(&m_recv_buffer[0] - , &m_recv_buffer[0] + m_recv_pos); + , &m_recv_buffer[0] + rcv_pos); } bool allocate_disk_receive_buffer(int disk_buffer_size); diff --git a/src/bt_peer_connection.cpp b/src/bt_peer_connection.cpp index f5e1fe4a8..53712b467 100644 --- a/src/bt_peer_connection.cpp +++ b/src/bt_peer_connection.cpp @@ -1082,7 +1082,7 @@ namespace libtorrent TORRENT_ASSERT(received > 0); buffer::const_interval recv_buffer = receive_buffer(); - int recv_pos = recv_buffer.end - recv_buffer.begin; + int recv_pos = receive_pos(); // recv_buffer.end - recv_buffer.begin; boost::shared_ptr t = associated_torrent().lock(); TORRENT_ASSERT(t);