From efec65050ecdd904410a2dc4880f5c728d22a3a3 Mon Sep 17 00:00:00 2001 From: Yat Ho Date: Sat, 1 Jun 2024 23:23:46 +0800 Subject: [PATCH] fix: don't call `tr_logAddTraceIo` before `tr_peerIo::set_socket()` (#6881) * fix: add fallback for invalid address display name * fix: only call tr_logAddTraceIo after `tr_peerIo::set_socket()` is called * chore: housekeeping * code review: handle `nullptr` from `inet_ntop()` instead * code review: remove unclear comment * code review: dedupe peerIo bandwidth log --- libtransmission/net.cc | 8 ++++++-- libtransmission/peer-io.cc | 11 ++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/libtransmission/net.cc b/libtransmission/net.cc index 6df2a13c3..576cf2175 100644 --- a/libtransmission/net.cc +++ b/libtransmission/net.cc @@ -516,12 +516,16 @@ std::optional tr_address::from_string(std::string_view address_sv) std::string_view tr_address::display_name(char* out, size_t outlen) const { TR_ASSERT(is_valid()); - return evutil_inet_ntop(tr_ip_protocol_to_af(type), &addr, out, outlen); + if (auto* name = evutil_inet_ntop(tr_ip_protocol_to_af(type), &addr, out, outlen)) + { + return name; + } + return "Invalid address"sv; } [[nodiscard]] std::string tr_address::display_name() const { - auto buf = std::array{}; + auto buf = std::array{}; return std::string{ display_name(std::data(buf), std::size(buf)) }; } diff --git a/libtransmission/peer-io.cc b/libtransmission/peer-io.cc index d57acb62e..9af576221 100644 --- a/libtransmission/peer-io.cc +++ b/libtransmission/peer-io.cc @@ -70,6 +70,13 @@ size_t get_desired_output_buffer_size(tr_peerIo const* io, uint64_t now) auto const current_speed = io->get_piece_speed(now, TR_UP); return std::max(Floor, current_speed.base_quantity() * PeriodSecs); } + +void log_peer_io_bandwidth(tr_peerIo const& peer_io, tr_bandwidth* const parent) +{ + tr_logAddTraceIo( + &peer_io, + fmt::format("bandwidth is {}; its parent is {}", fmt::ptr(&peer_io.bandwidth()), fmt::ptr(parent))); +} } // namespace // --- @@ -100,7 +107,6 @@ std::shared_ptr tr_peerIo::create( auto io = std::make_shared(session, info_hash, is_incoming, is_seed, parent); io->bandwidth().set_peer(io); - tr_logAddTraceIo(io, fmt::format("bandwidth is {}; its parent is {}", fmt::ptr(&io->bandwidth()), fmt::ptr(parent))); return io; } @@ -110,6 +116,7 @@ std::shared_ptr tr_peerIo::new_incoming(tr_session* session, tr_bandw auto peer_io = tr_peerIo::create(session, parent, nullptr, true, false); peer_io->set_socket(std::move(socket)); + log_peer_io_bandwidth(*peer_io, parent); return peer_io; } @@ -167,12 +174,14 @@ std::shared_ptr tr_peerIo::new_outgoing( if (func.at(preferred)()) { + log_peer_io_bandwidth(*peer_io, parent); return peer_io; } for (preferred_key_t i = 0U; i < TR_NUM_PREFERRED_TRANSPORT; ++i) { if (i != preferred && func.at(i)()) { + log_peer_io_bandwidth(*peer_io, parent); return peer_io; } }