mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-23 17:59:17 +00:00
lt sync 2518 - mostly timeout fixes
This commit is contained in:
parent
c0bc622fca
commit
2b9663edce
@ -600,6 +600,7 @@ namespace libtorrent
|
||||
ptime m_remote_dl_update;
|
||||
|
||||
// the time when async_connect was called
|
||||
// or when the incoming connection was established
|
||||
ptime m_connect;
|
||||
|
||||
// the time when this peer sent us a not_interested message
|
||||
|
@ -124,6 +124,8 @@ namespace libtorrent
|
||||
{
|
||||
ptime() {}
|
||||
explicit ptime(boost::int64_t t): time(t) {}
|
||||
ptime& operator+=(time_duration rhs) { time += rhs.diff; return *this; }
|
||||
ptime& operator-=(time_duration rhs) { time -= rhs.diff; return *this; }
|
||||
boost::int64_t time;
|
||||
};
|
||||
|
||||
|
@ -84,6 +84,7 @@ namespace libtorrent
|
||||
, m_requested(min_time())
|
||||
, m_timeout_extend(0)
|
||||
, m_remote_dl_update(time_now())
|
||||
, m_connect(time_now())
|
||||
, m_became_uninterested(time_now())
|
||||
, m_became_uninteresting(time_now())
|
||||
, m_free_upload(0)
|
||||
@ -187,6 +188,7 @@ namespace libtorrent
|
||||
, m_requested(min_time())
|
||||
, m_timeout_extend(0)
|
||||
, m_remote_dl_update(time_now())
|
||||
, m_connect(time_now())
|
||||
, m_became_uninterested(time_now())
|
||||
, m_became_uninteresting(time_now())
|
||||
, m_free_upload(0)
|
||||
@ -1511,6 +1513,8 @@ namespace libtorrent
|
||||
return;
|
||||
}
|
||||
|
||||
ptime now = time_now();
|
||||
|
||||
piece_picker& picker = t->picker();
|
||||
piece_manager& fs = t->filesystem();
|
||||
|
||||
@ -1580,14 +1584,14 @@ namespace libtorrent
|
||||
m_timeout_extend = 0;
|
||||
|
||||
if (!m_download_queue.empty())
|
||||
m_requested = time_now();
|
||||
m_requested = now;
|
||||
|
||||
request_a_block(*t, *this);
|
||||
send_block_requests();
|
||||
return;
|
||||
}
|
||||
|
||||
if (total_seconds(time_now() - m_requested)
|
||||
if (total_seconds(now - m_requested)
|
||||
< m_ses.settings().request_timeout
|
||||
&& m_snubbed)
|
||||
{
|
||||
@ -1605,9 +1609,17 @@ namespace libtorrent
|
||||
TORRENT_ASSERT(m_channel_state[download_channel] == peer_info::bw_idle);
|
||||
m_download_queue.erase(b);
|
||||
|
||||
m_timeout_extend = 0;
|
||||
if (!m_download_queue.empty())
|
||||
m_requested = time_now();
|
||||
{
|
||||
m_timeout_extend = (std::max)(m_timeout_extend
|
||||
- m_ses.settings().request_timeout, 0);
|
||||
m_requested += seconds(m_ses.settings().request_timeout);
|
||||
if (m_requested > now) m_requested = now;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_timeout_extend = 0;
|
||||
}
|
||||
|
||||
// did we request this block from any other peers?
|
||||
bool multi = picker.num_peers(block_finished) > 1;
|
||||
|
@ -1022,6 +1022,23 @@ namespace aux {
|
||||
<< m_disk_thread.disk_allocations() << "\t"
|
||||
<< std::endl;
|
||||
#endif
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// check for incoming connections that might have timed out
|
||||
// --------------------------------------------------------------
|
||||
|
||||
for (connection_map::iterator i = m_connections.begin();
|
||||
i != m_connections.end();)
|
||||
{
|
||||
peer_connection* p = (*i).get();
|
||||
++i;
|
||||
// ignore connections that already have a torrent, since they
|
||||
// are ticket through the torrents' second_ticket
|
||||
if (!p->associated_torrent().expired()) continue;
|
||||
if (m_last_tick - p->connected_time() > seconds(m_settings.peer_connect_timeout))
|
||||
p->disconnect("timeout: incoming connection");
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// second_tick every torrent
|
||||
// --------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user