forked from premiere/premiere-libtorrent
fixed DHT bug where requests that timed out would be treated as transaction_id overflows and would slow down DHT lookups considerably.
This commit is contained in:
parent
027952f69d
commit
166f761df3
|
@ -115,7 +115,7 @@ namespace libtorrent
|
|||
, max_outstanding_disk_bytes_per_connection(64 * 1024)
|
||||
, handshake_timeout(10)
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
, use_dht_as_fallback(true)
|
||||
, use_dht_as_fallback(false)
|
||||
#endif
|
||||
, free_torrent_hashes(true)
|
||||
, upnp_ignore_nonrouters(true)
|
||||
|
|
|
@ -307,7 +307,9 @@ time_duration rpc_manager::tick()
|
|||
|
||||
if (m_next_transaction_id == m_oldest_transaction_id) return milliseconds(timeout_ms);
|
||||
|
||||
std::vector<observer_ptr > timeouts;
|
||||
std::vector<observer_ptr> timeouts;
|
||||
|
||||
time_duration ret = milliseconds(timeout_ms);
|
||||
|
||||
for (;m_next_transaction_id != m_oldest_transaction_id;
|
||||
m_oldest_transaction_id = (m_oldest_transaction_id + 1) % max_transactions)
|
||||
|
@ -321,8 +323,16 @@ time_duration rpc_manager::tick()
|
|||
time_duration diff = o->sent + milliseconds(timeout_ms) - time_now();
|
||||
if (diff > seconds(0))
|
||||
{
|
||||
if (diff < seconds(1)) return seconds(1);
|
||||
return diff;
|
||||
if (diff < seconds(1))
|
||||
{
|
||||
ret = seconds(1);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = diff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
|
@ -343,7 +353,7 @@ time_duration rpc_manager::tick()
|
|||
// generate new requests. We need to swap, since the
|
||||
// destrutors may add more observers to the m_aborted_transactions
|
||||
std::vector<observer_ptr>().swap(m_aborted_transactions);
|
||||
return milliseconds(timeout_ms);
|
||||
return ret;
|
||||
}
|
||||
|
||||
unsigned int rpc_manager::new_transaction_id(observer_ptr o)
|
||||
|
|
Loading…
Reference in New Issue