forked from premiere/premiere-libtorrent
rate limiter fix
This commit is contained in:
parent
764b5864c6
commit
e2ca3e1545
|
@ -41,6 +41,7 @@
|
||||||
incoming connection
|
incoming connection
|
||||||
* added more detailed instrumentation of the disk I/O thread
|
* added more detailed instrumentation of the disk I/O thread
|
||||||
|
|
||||||
|
* fixed limitation in rate limiter
|
||||||
* fixed build error with boost 1.44
|
* fixed build error with boost 1.44
|
||||||
|
|
||||||
0.15.2 release
|
0.15.2 release
|
||||||
|
|
|
@ -793,6 +793,7 @@ int main(int argc, char* argv[])
|
||||||
" -H Don't start DHT\n"
|
" -H Don't start DHT\n"
|
||||||
" -W <num peers> Set the max number of peers to keep in the peer list\n"
|
" -W <num peers> Set the max number of peers to keep in the peer list\n"
|
||||||
" -N Do not attempt to use UPnP and NAT-PMP to forward ports\n"
|
" -N Do not attempt to use UPnP and NAT-PMP to forward ports\n"
|
||||||
|
" -Y Rate limit local peers\n"
|
||||||
" "
|
" "
|
||||||
"\n\n"
|
"\n\n"
|
||||||
"TORRENT is a path to a .torrent file\n"
|
"TORRENT is a path to a .torrent file\n"
|
||||||
|
@ -989,6 +990,7 @@ int main(int argc, char* argv[])
|
||||||
break;
|
break;
|
||||||
case 'I': outgoing_interface = arg; break;
|
case 'I': outgoing_interface = arg; break;
|
||||||
case 'N': start_upnp = false; --i; break;
|
case 'N': start_upnp = false; --i; break;
|
||||||
|
case 'Y': settings.ignore_limits_on_local_network = false; --i; break;
|
||||||
}
|
}
|
||||||
++i; // skip the argument
|
++i; // skip the argument
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define TORRENT_BANDWIDTH_CHANNEL_HPP_INCLUDED
|
#define TORRENT_BANDWIDTH_CHANNEL_HPP_INCLUDED
|
||||||
|
|
||||||
#include <boost/integer_traits.hpp>
|
#include <boost/integer_traits.hpp>
|
||||||
|
#include <boost/cstdint.hpp>
|
||||||
|
|
||||||
#include "libtorrent/assert.hpp"
|
#include "libtorrent/assert.hpp"
|
||||||
|
|
||||||
|
@ -70,11 +71,11 @@ private:
|
||||||
|
|
||||||
// this is the amount of bandwidth we have
|
// this is the amount of bandwidth we have
|
||||||
// been assigned without using yet.
|
// been assigned without using yet.
|
||||||
int m_quota_left;
|
boost::int64_t m_quota_left;
|
||||||
|
|
||||||
// the limit is the number of bytes
|
// the limit is the number of bytes
|
||||||
// per second we are allowed to use.
|
// per second we are allowed to use.
|
||||||
int m_limit;
|
boost::int64_t m_limit;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ namespace libtorrent
|
||||||
int bandwidth_channel::quota_left() const
|
int bandwidth_channel::quota_left() const
|
||||||
{
|
{
|
||||||
if (m_limit == 0) return inf;
|
if (m_limit == 0) return inf;
|
||||||
return (std::max)(m_quota_left, 0);
|
return (std::max)(m_quota_left, boost::int64_t(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void bandwidth_channel::update_quota(int dt_milliseconds)
|
void bandwidth_channel::update_quota(int dt_milliseconds)
|
||||||
|
@ -60,9 +60,10 @@ namespace libtorrent
|
||||||
if (m_limit == 0) return;
|
if (m_limit == 0) return;
|
||||||
m_quota_left += (m_limit * dt_milliseconds + 500) / 1000;
|
m_quota_left += (m_limit * dt_milliseconds + 500) / 1000;
|
||||||
if (m_quota_left > m_limit * 3) m_quota_left = m_limit * 3;
|
if (m_quota_left > m_limit * 3) m_quota_left = m_limit * 3;
|
||||||
distribute_quota = (std::max)(m_quota_left, 0);
|
distribute_quota = (std::max)(m_quota_left, boost::int64_t(0));
|
||||||
// fprintf(stderr, "%p: [%d]: + %d limit: %d\n", this
|
// fprintf(stderr, "%p: [%d]: + %"PRId64" limit: %"PRId64" quota_left: %"PRId64"\n", this
|
||||||
// , dt_milliseconds, (m_limit * dt_milliseconds + 500) / 1000, m_limit);
|
// , dt_milliseconds, (m_limit * dt_milliseconds + 500) / 1000, m_limit
|
||||||
|
// , m_quota_left);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is used when connections disconnect with
|
// this is used when connections disconnect with
|
||||||
|
@ -81,6 +82,9 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(amount >= 0);
|
TORRENT_ASSERT(amount >= 0);
|
||||||
TORRENT_ASSERT(m_limit >= 0);
|
TORRENT_ASSERT(m_limit >= 0);
|
||||||
if (m_limit == 0) return;
|
if (m_limit == 0) return;
|
||||||
|
|
||||||
|
// fprintf(stderr, "%p: - %"PRId64" limit: %"PRId64" quota_left: %"PRId64"\n", this
|
||||||
|
// , amount, m_limit, m_quota_left);
|
||||||
m_quota_left -= amount;
|
m_quota_left -= amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4179,7 +4179,9 @@ namespace libtorrent
|
||||||
// peers that we are not interested in are non-prioritized
|
// peers that we are not interested in are non-prioritized
|
||||||
m_channel_state[upload_channel] = peer_info::bw_limit;
|
m_channel_state[upload_channel] = peer_info::bw_limit;
|
||||||
m_ses.m_upload_rate.request_bandwidth(self()
|
m_ses.m_upload_rate.request_bandwidth(self()
|
||||||
, m_send_buffer.size(), priority
|
, (std::max)(m_send_buffer.size(), m_statistics.upload_rate() * 2
|
||||||
|
/ (1000 / m_ses.m_settings.tick_interval))
|
||||||
|
, priority
|
||||||
, bwc1, bwc2, bwc3, bwc4);
|
, bwc1, bwc2, bwc3, bwc4);
|
||||||
#ifdef TORRENT_VERBOSE_LOGGING
|
#ifdef TORRENT_VERBOSE_LOGGING
|
||||||
(*m_logger) << time_now_string() << " *** REQUEST_BANDWIDTH [ "
|
(*m_logger) << time_now_string() << " *** REQUEST_BANDWIDTH [ "
|
||||||
|
@ -4212,7 +4214,9 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(m_outstanding_bytes >= 0);
|
TORRENT_ASSERT(m_outstanding_bytes >= 0);
|
||||||
m_channel_state[download_channel] = peer_info::bw_limit;
|
m_channel_state[download_channel] = peer_info::bw_limit;
|
||||||
m_ses.m_download_rate.request_bandwidth(self()
|
m_ses.m_download_rate.request_bandwidth(self()
|
||||||
, (std::max)(m_outstanding_bytes, m_packet_size - m_recv_pos) + 30
|
, (std::max)((std::max)(m_outstanding_bytes, m_packet_size - m_recv_pos) + 30
|
||||||
|
, m_statistics.download_rate() * 2
|
||||||
|
/ (1000 / m_ses.m_settings.tick_interval))
|
||||||
, priority , bwc1, bwc2, bwc3, bwc4);
|
, priority , bwc1, bwc2, bwc3, bwc4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1326,7 +1326,7 @@ namespace aux {
|
||||||
if (update_disk_io_thread)
|
if (update_disk_io_thread)
|
||||||
update_disk_thread_settings();
|
update_disk_thread_settings();
|
||||||
|
|
||||||
if (m_allowed_upload_slots <= m_settings.num_optimistic_unchoke_slots / 2)
|
if (m_settings.num_optimistic_unchoke_slots >= m_allowed_upload_slots / 2)
|
||||||
{
|
{
|
||||||
if (m_alerts.should_post<performance_alert>())
|
if (m_alerts.should_post<performance_alert>())
|
||||||
m_alerts.post_alert(performance_alert(torrent_handle()
|
m_alerts.post_alert(performance_alert(torrent_handle()
|
||||||
|
@ -3697,7 +3697,7 @@ namespace aux {
|
||||||
if (m_max_uploads == limit) return;
|
if (m_max_uploads == limit) return;
|
||||||
m_max_uploads = limit;
|
m_max_uploads = limit;
|
||||||
m_allowed_upload_slots = limit;
|
m_allowed_upload_slots = limit;
|
||||||
if (m_allowed_upload_slots <= m_settings.num_optimistic_unchoke_slots / 2)
|
if (m_settings.num_optimistic_unchoke_slots >= m_allowed_upload_slots / 2)
|
||||||
{
|
{
|
||||||
if (m_alerts.should_post<performance_alert>())
|
if (m_alerts.should_post<performance_alert>())
|
||||||
m_alerts.post_alert(performance_alert(torrent_handle()
|
m_alerts.post_alert(performance_alert(torrent_handle()
|
||||||
|
@ -4063,7 +4063,9 @@ namespace aux {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_settings.num_optimistic_unchoke_slots)
|
if (m_settings.num_optimistic_unchoke_slots)
|
||||||
|
{
|
||||||
TORRENT_ASSERT(num_optimistic <= m_settings.num_optimistic_unchoke_slots);
|
TORRENT_ASSERT(num_optimistic <= m_settings.num_optimistic_unchoke_slots);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_num_unchoked != unchokes)
|
if (m_num_unchoked != unchokes)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue