From 2d722c3431d70d44e261660ca36a9a90c7aefee7 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Wed, 30 Nov 2022 08:39:12 +0300 Subject: [PATCH] Erase finished transfer_id from receivers (#535) --- rldp/rldp-in.hpp | 2 +- rldp/rldp.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/rldp/rldp-in.hpp b/rldp/rldp-in.hpp index 9640fd98..266f128a 100644 --- a/rldp/rldp-in.hpp +++ b/rldp/rldp-in.hpp @@ -96,7 +96,7 @@ class RldpIn : public RldpImpl { void receive_message(adnl::AdnlNodeIdShort source, adnl::AdnlNodeIdShort local_id, TransferId transfer_id, td::BufferSlice data); - void in_transfer_completed(TransferId transfer_id); + void in_transfer_completed(TransferId transfer_id, bool success); void add_id(adnl::AdnlNodeIdShort local_id) override; void get_conn_ip_str(adnl::AdnlNodeIdShort l_id, adnl::AdnlNodeIdShort p_id, td::Promise promise) override; diff --git a/rldp/rldp.cpp b/rldp/rldp.cpp index 1a772a68..402740e1 100644 --- a/rldp/rldp.cpp +++ b/rldp/rldp.cpp @@ -134,11 +134,11 @@ void RldpIn::process_message_part(adnl::AdnlNodeIdShort source, adnl::AdnlNodeId } auto P = td::PromiseCreator::lambda( [SelfId = actor_id(this), source, local_id, transfer_id = part.transfer_id_](td::Result R) { + td::actor::send_closure(SelfId, &RldpIn::in_transfer_completed, transfer_id, R.is_ok()); if (R.is_error()) { VLOG(RLDP_INFO) << "failed to receive: " << R.move_as_error(); return; } - td::actor::send_closure(SelfId, &RldpIn::in_transfer_completed, transfer_id); td::actor::send_closure(SelfId, &RldpIn::receive_message, source, local_id, transfer_id, R.move_as_ok()); }); @@ -228,8 +228,9 @@ void RldpIn::transfer_completed(TransferId transfer_id) { VLOG(RLDP_DEBUG) << "rldp: completed transfer " << transfer_id << "; " << senders_.size() << " out transfer pending "; } -void RldpIn::in_transfer_completed(TransferId transfer_id) { - if (lru_set_.count(transfer_id) == 1) { +void RldpIn::in_transfer_completed(TransferId transfer_id, bool success) { + receivers_.erase(transfer_id); + if (!success || lru_set_.count(transfer_id) == 1) { return; } while (lru_size_ >= lru_size()) {