forked from premiere/premiere-libtorrent
another attempt to set peer send state when stalled on disk
This commit is contained in:
parent
17b4cb027c
commit
56054fac58
|
@ -4214,54 +4214,10 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!can_write())
|
|
||||||
{
|
|
||||||
#ifdef TORRENT_VERBOSE_LOGGING
|
|
||||||
if (m_send_buffer.empty())
|
|
||||||
{
|
|
||||||
(*m_logger) << time_now_string() << " *** SEND BUFFER DEPLETED ["
|
|
||||||
" quota: " << m_quota[upload_channel] <<
|
|
||||||
" ignore: " << (m_ignore_bandwidth_limits?"yes":"no") <<
|
|
||||||
" buf: " << m_send_buffer.size() <<
|
|
||||||
" connecting: " << (m_connecting?"yes":"no") <<
|
|
||||||
" disconnecting: " << (m_disconnecting?"yes":"no") <<
|
|
||||||
" ]\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
(*m_logger) << time_now_string() << " *** CANNOT WRITE ["
|
|
||||||
" quota: " << m_quota[upload_channel] <<
|
|
||||||
" ignore: " << (m_ignore_bandwidth_limits?"yes":"no") <<
|
|
||||||
" buf: " << m_send_buffer.size() <<
|
|
||||||
" connecting: " << (m_connecting?"yes":"no") <<
|
|
||||||
" disconnecting: " << (m_disconnecting?"yes":"no") <<
|
|
||||||
" ]\n";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int quota_left = m_quota[upload_channel];
|
int quota_left = m_quota[upload_channel];
|
||||||
// send the actual buffer
|
|
||||||
if (!m_send_buffer.empty())
|
|
||||||
{
|
|
||||||
int amount_to_send = m_send_buffer.size();
|
|
||||||
if (amount_to_send > quota_left)
|
|
||||||
amount_to_send = quota_left;
|
|
||||||
|
|
||||||
TORRENT_ASSERT(amount_to_send > 0);
|
if (m_send_buffer.empty()
|
||||||
|
&& m_reading_bytes > 0
|
||||||
#ifdef TORRENT_VERBOSE_LOGGING
|
|
||||||
(*m_logger) << time_now_string() << " *** ASYNC_WRITE [ bytes: " << amount_to_send << " ]\n";
|
|
||||||
#endif
|
|
||||||
std::list<asio::const_buffer> const& vec = m_send_buffer.build_iovec(amount_to_send);
|
|
||||||
m_socket->async_write_some(
|
|
||||||
vec, make_write_handler(bind(
|
|
||||||
&peer_connection::on_send_data, self(), _1, _2)));
|
|
||||||
|
|
||||||
m_channel_state[upload_channel] = peer_info::bw_network;
|
|
||||||
}
|
|
||||||
else if (m_reading_bytes > 0
|
|
||||||
&& quota_left > 0)
|
&& quota_left > 0)
|
||||||
{
|
{
|
||||||
m_channel_state[upload_channel] = peer_info::bw_disk;
|
m_channel_state[upload_channel] = peer_info::bw_disk;
|
||||||
|
@ -4287,6 +4243,52 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!can_write())
|
||||||
|
{
|
||||||
|
#ifdef TORRENT_VERBOSE_LOGGING
|
||||||
|
if (m_send_buffer.empty())
|
||||||
|
{
|
||||||
|
(*m_logger) << time_now_string() << " *** SEND BUFFER DEPLETED ["
|
||||||
|
" quota: " << m_quota[upload_channel] <<
|
||||||
|
" ignore: " << (m_ignore_bandwidth_limits?"yes":"no") <<
|
||||||
|
" buf: " << m_send_buffer.size() <<
|
||||||
|
" connecting: " << (m_connecting?"yes":"no") <<
|
||||||
|
" disconnecting: " << (m_disconnecting?"yes":"no") <<
|
||||||
|
" pending_disk: " << m_reading_bytes <<
|
||||||
|
" ]\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*m_logger) << time_now_string() << " *** CANNOT WRITE ["
|
||||||
|
" quota: " << m_quota[upload_channel] <<
|
||||||
|
" ignore: " << (m_ignore_bandwidth_limits?"yes":"no") <<
|
||||||
|
" buf: " << m_send_buffer.size() <<
|
||||||
|
" connecting: " << (m_connecting?"yes":"no") <<
|
||||||
|
" disconnecting: " << (m_disconnecting?"yes":"no") <<
|
||||||
|
" pending_disk: " << m_reading_bytes <<
|
||||||
|
" ]\n";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send the actual buffer
|
||||||
|
int amount_to_send = m_send_buffer.size();
|
||||||
|
if (amount_to_send > quota_left)
|
||||||
|
amount_to_send = quota_left;
|
||||||
|
|
||||||
|
TORRENT_ASSERT(amount_to_send > 0);
|
||||||
|
|
||||||
|
#ifdef TORRENT_VERBOSE_LOGGING
|
||||||
|
(*m_logger) << time_now_string() << " *** ASYNC_WRITE [ bytes: " << amount_to_send << " ]\n";
|
||||||
|
#endif
|
||||||
|
std::list<asio::const_buffer> const& vec = m_send_buffer.build_iovec(amount_to_send);
|
||||||
|
m_socket->async_write_some(
|
||||||
|
vec, make_write_handler(bind(
|
||||||
|
&peer_connection::on_send_data, self(), _1, _2)));
|
||||||
|
|
||||||
|
m_channel_state[upload_channel] = peer_info::bw_network;
|
||||||
}
|
}
|
||||||
|
|
||||||
void peer_connection::setup_receive()
|
void peer_connection::setup_receive()
|
||||||
|
|
Loading…
Reference in New Issue