From eb76b35c1daf8c85ea872c7c23fadef881a59d9f Mon Sep 17 00:00:00 2001 From: Green Sky Date: Tue, 28 Oct 2025 19:40:53 +0100 Subject: [PATCH] fix ft activity shortcicuting move receiving transfers before sending transfers --- solanaceae/ngc_ft1/ngcft1.cpp | 50 +++++++++++++++++------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/solanaceae/ngc_ft1/ngcft1.cpp b/solanaceae/ngc_ft1/ngcft1.cpp index 620bcf6..81b0ac4 100644 --- a/solanaceae/ngc_ft1/ngcft1.cpp +++ b/solanaceae/ngc_ft1/ngcft1.cpp @@ -172,6 +172,30 @@ void NGCFT1::updateSendTransfer(float time_delta, uint32_t group_number, uint32_ } bool NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_number, Group::Peer& peer) { + bool recv_activity {false}; + for (size_t idx = 0; idx < peer.recv_transfers.size(); idx++) { + if (!peer.recv_transfers.at(idx).has_value()) { + continue; + } + + auto& transfer = peer.recv_transfers.at(idx).value(); + + // proper switch case? + if (transfer.state == Group::Peer::RecvTransfer::State::FINISHING) { + transfer.timer -= time_delta; + if (transfer.timer <= 0.f) { + peer.recv_transfers.at(idx).reset(); + } + recv_activity = true; // count as activity, not sure we need this + } else { + transfer.timer += time_delta; + if (transfer.timer < 0.5f) { + // back off when no activity + recv_activity = true; + } + } + } + if (peer.cca) { auto timeouts = peer.cca->getTimeouts(); std::set timeouts_set{timeouts.cbegin(), timeouts.cend()}; @@ -202,30 +226,6 @@ bool NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_ } } - bool recv_activity {false}; - for (size_t idx = 0; idx < peer.recv_transfers.size(); idx++) { - if (!peer.recv_transfers.at(idx).has_value()) { - continue; - } - - auto& transfer = peer.recv_transfers.at(idx).value(); - - // proper switch case? - if (transfer.state == Group::Peer::RecvTransfer::State::FINISHING) { - transfer.timer -= time_delta; - if (transfer.timer <= 0.f) { - peer.recv_transfers.at(idx).reset(); - } - recv_activity = true; // count as activity, not sure we need this - } else { - transfer.timer += time_delta; - if (transfer.timer < 0.5f) { - // back off when no activity - recv_activity = true; - } - } - } - return peer.active_send_transfers > 0 || recv_activity; } @@ -275,7 +275,7 @@ float NGCFT1::iterate(float time_delta) { bool transfer_activity {false}; for (auto& [group_number, group] : groups) { for (auto& [peer_number, peer] : group.peers) { - transfer_activity = transfer_activity || iteratePeer(time_delta, group_number, peer_number, peer); + transfer_activity = iteratePeer(time_delta, group_number, peer_number, peer) || transfer_activity; #if 0 // find any active transfer