From eaaf7986617ca578acafdba4898279065f3955c1 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sun, 7 Jul 2024 11:03:36 +0200 Subject: [PATCH] clear receiving transfers TODO: actually keep around for 2*delay, so missing packets can still be retransmitted but this fixes perf issues --- solanaceae/ngc_ft1/ngcft1.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/solanaceae/ngc_ft1/ngcft1.cpp b/solanaceae/ngc_ft1/ngcft1.cpp index e5c7e95..1c4d386 100644 --- a/solanaceae/ngc_ft1/ngcft1.cpp +++ b/solanaceae/ngc_ft1/ngcft1.cpp @@ -372,7 +372,7 @@ bool NGCFT1::onEvent(const Events::NGCEXT_ft1_init& e) { auto& peer = groups[e.group_number].peers[e.peer_number]; if (peer.recv_transfers[e.transfer_id].has_value()) { - std::cerr << "NGCFT1 warning: overwriting existing recv_transfer " << int(e.transfer_id) << "\n"; + std::cerr << "NGCFT1 warning: overwriting existing recv_transfer " << int(e.transfer_id) << ", other peer started new transfer on preexising\n"; } peer.recv_transfers[e.transfer_id] = Group::Peer::RecvTransfer{ @@ -502,6 +502,11 @@ bool NGCFT1::onEvent(const Events::NGCEXT_ft1_data& e) { e.transfer_id } ); + + // delete transfer + // TODO: keep around for remote timeout + delay + offset, so we can be sure all acks where received + // or implement a dedicated finished that needs to be acked + peer.recv_transfers[e.transfer_id].reset(); } return true;