Merge pull request #812
3102feb
abstract_tcp_server2: fix send queue limit warning spam (moneromooo-monero)6bca9a8
abstract_tcp_server2: avoid deadlock waiting for send queue to drain (moneromooo-monero)7450656
net_node: fix connection leak when ping fails with bad response (moneromooo-monero)
This commit is contained in:
commit
0fb0e7701b
|
@ -490,7 +490,9 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
||||||
sleep_before_packet(cb, 1, 1);
|
sleep_before_packet(cb, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
epee::critical_region_t<decltype(m_send_que_lock)> send_guard(m_send_que_lock); // *** critical ***
|
m_send_que_lock.lock(); // *** critical ***
|
||||||
|
epee::misc_utils::auto_scope_leave_caller scope_exit_handler = epee::misc_utils::create_scope_leave_handler([&](){m_send_que_lock.unlock();});
|
||||||
|
|
||||||
long int retry=0;
|
long int retry=0;
|
||||||
const long int retry_limit = 5*4;
|
const long int retry_limit = 5*4;
|
||||||
while (m_send_que.size() > ABSTRACT_SERVER_SEND_QUE_MAX_COUNT)
|
while (m_send_que.size() > ABSTRACT_SERVER_SEND_QUE_MAX_COUNT)
|
||||||
|
@ -504,14 +506,15 @@ PRAGMA_WARNING_DISABLE_VS(4355)
|
||||||
|
|
||||||
long int ms = 250 + (rand()%50);
|
long int ms = 250 + (rand()%50);
|
||||||
_info_c("net/sleep", "Sleeping because QUEUE is FULL, in " << __FUNCTION__ << " for " << ms << " ms before packet_size="<<cb); // XXX debug sleep
|
_info_c("net/sleep", "Sleeping because QUEUE is FULL, in " << __FUNCTION__ << " for " << ms << " ms before packet_size="<<cb); // XXX debug sleep
|
||||||
|
m_send_que_lock.unlock();
|
||||||
boost::this_thread::sleep(boost::posix_time::milliseconds( ms ) );
|
boost::this_thread::sleep(boost::posix_time::milliseconds( ms ) );
|
||||||
|
m_send_que_lock.lock();
|
||||||
_dbg1("sleep for queue: " << ms);
|
_dbg1("sleep for queue: " << ms);
|
||||||
|
|
||||||
if (retry > retry_limit) {
|
if (retry > retry_limit) {
|
||||||
send_guard.unlock();
|
|
||||||
_erro("send que size is more than ABSTRACT_SERVER_SEND_QUE_MAX_COUNT(" << ABSTRACT_SERVER_SEND_QUE_MAX_COUNT << "), shutting down connection");
|
_erro("send que size is more than ABSTRACT_SERVER_SEND_QUE_MAX_COUNT(" << ABSTRACT_SERVER_SEND_QUE_MAX_COUNT << "), shutting down connection");
|
||||||
// _dbg1_c("net/sleep", "send que size is more than ABSTRACT_SERVER_SEND_QUE_MAX_COUNT(" << ABSTRACT_SERVER_SEND_QUE_MAX_COUNT << "), shutting down connection");
|
// _dbg1_c("net/sleep", "send que size is more than ABSTRACT_SERVER_SEND_QUE_MAX_COUNT(" << ABSTRACT_SERVER_SEND_QUE_MAX_COUNT << "), shutting down connection");
|
||||||
close();
|
shutdown();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1319,6 +1319,7 @@ namespace nodetool
|
||||||
if(rsp.status != PING_OK_RESPONSE_STATUS_TEXT || pr != rsp.peer_id)
|
if(rsp.status != PING_OK_RESPONSE_STATUS_TEXT || pr != rsp.peer_id)
|
||||||
{
|
{
|
||||||
LOG_PRINT_CC_L2(ping_context, "back ping invoke wrong response \"" << rsp.status << "\" from" << ip << ":" << port << ", hsh_peer_id=" << pr_ << ", rsp.peer_id=" << rsp.peer_id);
|
LOG_PRINT_CC_L2(ping_context, "back ping invoke wrong response \"" << rsp.status << "\" from" << ip << ":" << port << ", hsh_peer_id=" << pr_ << ", rsp.peer_id=" << rsp.peer_id);
|
||||||
|
m_net_server.get_config_object().close(ping_context.m_connection_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_net_server.get_config_object().close(ping_context.m_connection_id);
|
m_net_server.get_config_object().close(ping_context.m_connection_id);
|
||||||
|
|
Loading…
Reference in New Issue