forked from premiere/premiere-libtorrent
fixed problem in quota management for upload and download bandwidth
This commit is contained in:
parent
68e8ea35ea
commit
d90f833eed
|
@ -202,21 +202,21 @@ namespace libtorrent
|
||||||
, res);
|
, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
void allocate_resources(
|
void allocate_resources(
|
||||||
int resources
|
int resources
|
||||||
, std::vector<session*>& _sessions
|
, std::vector<session*>& _sessions
|
||||||
, resource_request session::* res)
|
, resource_request session::* res)
|
||||||
{
|
{
|
||||||
typedef std::vector<session*>::iterator orig_iter;
|
typedef std::vector<session*>::iterator orig_iter;
|
||||||
typedef session* in_param;
|
typedef session* in_param;
|
||||||
typedef boost::transform_iterator<session& (*)(in_param), orig_iter> new_iter;
|
typedef boost::transform_iterator<session& (*)(in_param), orig_iter> new_iter;
|
||||||
|
|
||||||
aux::allocate_resources_impl(
|
aux::allocate_resources_impl(
|
||||||
resources
|
resources
|
||||||
, new_iter(_sessions.begin(), &aux::deref)
|
, new_iter(_sessions.begin(), &aux::deref)
|
||||||
, new_iter(_sessions.end(), &aux::deref)
|
, new_iter(_sessions.end(), &aux::deref)
|
||||||
, res);
|
, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -197,11 +197,13 @@ namespace
|
||||||
<< "hard send quota, bytes\n"
|
<< "hard send quota, bytes\n"
|
||||||
<< "soft send quota, bytes\n"
|
<< "soft send quota, bytes\n"
|
||||||
<< "excess bytes sent\n"
|
<< "excess bytes sent\n"
|
||||||
|
<< "excess bytes sent last time slice\n"
|
||||||
<< "bytes received\n"
|
<< "bytes received\n"
|
||||||
<< "bytes received 10 seconds mean\n"
|
<< "bytes received 10 seconds mean\n"
|
||||||
<< "hard receive quota, bytes\n"
|
<< "hard receive quota, bytes\n"
|
||||||
<< "soft receive quota, bytes\n"
|
<< "soft receive quota, bytes\n"
|
||||||
<< "excess bytes received\n"
|
<< "excess bytes received\n"
|
||||||
|
<< "excess bytes received last time slice\n"
|
||||||
<< "num peers\n"
|
<< "num peers\n"
|
||||||
|
|
||||||
<< "\n";
|
<< "\n";
|
||||||
|
@ -1862,12 +1864,14 @@ namespace libtorrent
|
||||||
for (peer_iterator i = m_connections.begin();
|
for (peer_iterator i = m_connections.begin();
|
||||||
i != m_connections.end(); ++i)
|
i != m_connections.end(); ++i)
|
||||||
{
|
{
|
||||||
ul_used += i->second->m_ul_bandwidth_quota.used;
|
peer_connection* p = i->second;
|
||||||
dl_used += i->second->m_dl_bandwidth_quota.used;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(ul_used == m_ul_bandwidth_quota.used);
|
// the bandwidth exceeding the given amount is accumulated to
|
||||||
assert(dl_used == m_dl_bandwidth_quota.used);
|
// the next timeslice, don't take it into account now as well!
|
||||||
|
// (that would lead to a spiral of accumulating used-values)
|
||||||
|
ul_used += std::min(p->m_ul_bandwidth_quota.used, p->m_ul_bandwidth_quota.given);
|
||||||
|
dl_used += std::min(p->m_dl_bandwidth_quota.used, p->m_dl_bandwidth_quota.given);
|
||||||
|
}
|
||||||
|
|
||||||
m_excess_ul += ul_used - m_ul_bandwidth_quota.given;
|
m_excess_ul += ul_used - m_ul_bandwidth_quota.given;
|
||||||
m_excess_dl += dl_used - m_dl_bandwidth_quota.given;
|
m_excess_dl += dl_used - m_dl_bandwidth_quota.given;
|
||||||
|
@ -1896,17 +1900,28 @@ namespace libtorrent
|
||||||
mean_ul /= 10;
|
mean_ul /= 10;
|
||||||
mean_dl /= 10;
|
mean_dl /= 10;
|
||||||
|
|
||||||
|
int ul_leftovers = 0;
|
||||||
|
int dl_leftovers = 0;
|
||||||
|
for (peer_iterator i = m_connections.begin();
|
||||||
|
i != m_connections.end(); ++i)
|
||||||
|
{
|
||||||
|
ul_leftovers += i->second->m_ul_bandwidth_quota.leftovers;
|
||||||
|
dl_leftovers += i->second->m_dl_bandwidth_quota.leftovers;
|
||||||
|
}
|
||||||
|
|
||||||
(*m_log) << m_second_count++ << "\t"
|
(*m_log) << m_second_count++ << "\t"
|
||||||
<< ul_used << "\t"
|
<< ul_used << "\t"
|
||||||
<< mean_ul << "\t"
|
<< mean_ul << "\t"
|
||||||
<< m_ul_bandwidth_quota.given << "\t"
|
<< m_ul_bandwidth_quota.given << "\t"
|
||||||
<< ul_to_distribute << "\t"
|
<< ul_to_distribute << "\t"
|
||||||
<< m_excess_ul << "\t"
|
<< m_excess_ul << "\t"
|
||||||
|
<< ul_leftovers << "\t"
|
||||||
<< dl_used << "\t"
|
<< dl_used << "\t"
|
||||||
<< mean_dl << "\t"
|
<< mean_dl << "\t"
|
||||||
<< m_dl_bandwidth_quota.given << "\t"
|
<< m_dl_bandwidth_quota.given << "\t"
|
||||||
<< dl_to_distribute << "\t"
|
<< dl_to_distribute << "\t"
|
||||||
<< m_excess_dl << "\t"
|
<< m_excess_dl << "\t"
|
||||||
|
<< dl_leftovers << "\t"
|
||||||
<< num_peers() << "\t"
|
<< num_peers() << "\t"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue