mirror of
https://github.com/monero-project/monero.git
synced 2024-12-23 12:09:54 +00:00
epee: keep a ref to a connection we're deleting
close might end up dropping a ref, ending up removing the connection from m_connects, as the lock is recursive. This'd cause an out of bounds exception and kill the idle connection maker thread
This commit is contained in:
parent
1a73843cec
commit
f2939bdce8
1 changed files with 8 additions and 2 deletions
|
@ -740,9 +740,15 @@ void async_protocol_handler_config<t_connection_context>::del_out_connections(si
|
|||
shuffle(out_connections.begin(), out_connections.end(), std::default_random_engine(seed));
|
||||
while (count > 0 && out_connections.size() > 0)
|
||||
{
|
||||
close(*out_connections.begin());
|
||||
del_connection(m_connects.at(*out_connections.begin()));
|
||||
boost::uuids::uuid connection_id = *out_connections.begin();
|
||||
async_protocol_handler<t_connection_context> *connection = find_connection(connection_id);
|
||||
// we temporarily ref the connection so it doesn't drop from the m_connects table
|
||||
// when we close it
|
||||
connection->start_outer_call();
|
||||
close(connection_id);
|
||||
del_connection(m_connects.at(connection_id));
|
||||
out_connections.erase(out_connections.begin());
|
||||
connection->finish_outer_call();
|
||||
--count;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue