mirror of
https://github.com/transmission/transmission
synced 2025-01-30 19:03:04 +00:00
fix: assertion failed: is_connectable_.value_or(true) || !is_connected()
(#6254)
This commit is contained in:
parent
4be0dca5ac
commit
234e3278f1
1 changed files with 17 additions and 17 deletions
|
@ -1213,22 +1213,22 @@ void create_bit_torrent_peer(tr_torrent* tor, std::shared_ptr<tr_peerIo> io, tr_
|
|||
TR_ASSERT(result.io != nullptr);
|
||||
auto const& socket_address = result.io->socket_address();
|
||||
auto* const swarm = manager->get_existing_swarm(result.io->torrent_hash());
|
||||
auto* info_ptr = swarm != nullptr ? swarm->get_existing_peer_info(socket_address) : nullptr;
|
||||
auto* info = swarm != nullptr ? swarm->get_existing_peer_info(socket_address) : nullptr;
|
||||
|
||||
if (result.io->is_incoming())
|
||||
{
|
||||
manager->incoming_handshakes.erase(socket_address);
|
||||
}
|
||||
else if (info_ptr != nullptr)
|
||||
else if (info != nullptr)
|
||||
{
|
||||
info_ptr->destroy_handshake();
|
||||
info->destroy_handshake();
|
||||
}
|
||||
|
||||
if (!result.is_connected || swarm == nullptr || !swarm->is_running)
|
||||
{
|
||||
if (info_ptr != nullptr && !info_ptr->is_connected())
|
||||
if (info != nullptr && !info->is_connected())
|
||||
{
|
||||
info_ptr->on_connection_failed();
|
||||
info->on_connection_failed();
|
||||
|
||||
if (!result.read_anything_from_peer)
|
||||
{
|
||||
|
@ -1236,39 +1236,39 @@ void create_bit_torrent_peer(tr_torrent* tor, std::shared_ptr<tr_peerIo> io, tr_
|
|||
swarm,
|
||||
fmt::format(
|
||||
"marking peer {} as unreachable... num_fails is {}",
|
||||
info_ptr->display_name(),
|
||||
info_ptr->connection_failure_count()));
|
||||
info_ptr->set_connectable(false);
|
||||
info->display_name(),
|
||||
info->connection_failure_count()));
|
||||
info->set_connectable(false);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (info_ptr == nullptr && result.io->is_incoming())
|
||||
if (result.io->is_incoming())
|
||||
{
|
||||
info_ptr = &swarm->ensure_info_exists(socket_address, 0U, TR_PEER_FROM_INCOMING, false);
|
||||
info = &swarm->ensure_info_exists(socket_address, 0U, TR_PEER_FROM_INCOMING, false);
|
||||
}
|
||||
|
||||
if (info_ptr == nullptr)
|
||||
if (info == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!result.io->is_incoming())
|
||||
{
|
||||
info_ptr->set_connectable();
|
||||
info->set_connectable();
|
||||
}
|
||||
|
||||
// If we're connected via µTP, then we know the peer supports µTP...
|
||||
if (result.io->is_utp())
|
||||
{
|
||||
info_ptr->set_utp_supported();
|
||||
info->set_utp_supported();
|
||||
}
|
||||
|
||||
if (info_ptr->is_banned())
|
||||
if (info->is_banned())
|
||||
{
|
||||
tr_logAddTraceSwarm(swarm, fmt::format("banned peer {} tried to reconnect", info_ptr->display_name()));
|
||||
tr_logAddTraceSwarm(swarm, fmt::format("banned peer {} tried to reconnect", info->display_name()));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1277,7 +1277,7 @@ void create_bit_torrent_peer(tr_torrent* tor, std::shared_ptr<tr_peerIo> io, tr_
|
|||
return false;
|
||||
}
|
||||
|
||||
if (info_ptr->is_connected()) // we're already connected to this peer; do nothing
|
||||
if (info->is_connected()) // we're already connected to this peer; do nothing
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -1291,7 +1291,7 @@ void create_bit_torrent_peer(tr_torrent* tor, std::shared_ptr<tr_peerIo> io, tr_
|
|||
}
|
||||
|
||||
result.io->set_bandwidth(&swarm->tor->bandwidth_);
|
||||
create_bit_torrent_peer(swarm->tor, result.io, info_ptr, client);
|
||||
create_bit_torrent_peer(swarm->tor, result.io, info, client);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue