From 934c13ca792c723ef9b032e04168ff939cbc2e69 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Tue, 5 Jan 2021 02:37:34 +0100 Subject: [PATCH] Optimize_memory code cleanup, add more error messages in MessagesManager --- td/telegram/FileReferenceManager.cpp | 30 ++++++++++++++++------------ td/telegram/MessagesManager.cpp | 6 +++++- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/td/telegram/FileReferenceManager.cpp b/td/telegram/FileReferenceManager.cpp index 1ac2e58a9..b0d4d0614 100644 --- a/td/telegram/FileReferenceManager.cpp +++ b/td/telegram/FileReferenceManager.cpp @@ -380,38 +380,42 @@ void FileReferenceManager::memory_cleanup() { if (print_debug_messages) LOG(ERROR) << "memory_cleanup begin"; + // Iterate all file sources and delete the unused ones auto file_source_it = file_sources_.begin(); - while (file_source_it != file_sources_.end()) { if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop begin"; auto source_id = file_source_it->first; + + // Mark immediately the file source as unused + auto file_source_unused = true; + + // Iterate all the file nodes while the source is unused auto file_nodes_it = nodes_.begin(); - auto remove = true; - - while (file_nodes_it != nodes_.end() && remove) { + while (file_nodes_it != nodes_.end() && file_source_unused) { if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop begin"; + // Get all the file sources related to the current file node auto elements = get_all_file_sources(file_nodes_it->first); - auto elements_it = elements.begin(); - while (elements_it != elements.end()) { + // Iterate all the file sources related to the current file node + auto elements_it = elements.begin(); + while (elements_it != elements.end() && file_source_unused) { if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop >> elements loop begin"; if (source_id == (u_long) elements_it->get()) { if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop >> elements loop break"; - remove = false; - break; + file_source_unused = false; + } else { + elements_it++; + if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop >> elements loop next"; } - - elements_it++; - if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop >> elements loop next"; } if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop >> elements loop end"; - + file_nodes_it++; if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop next"; } if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> file_nodes loop end"; - if (remove) { + if (file_source_unused) { if (print_debug_messages) LOG(ERROR) << "memory_cleanup >> file_source loop >> remove element from file_source"; file_source_it = file_sources_.erase(file_source_it); } else { diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 1de1d99a6..03f355c01 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -6381,6 +6381,7 @@ void MessagesManager::add_pending_update(tl_object_ptr &&u LOG(INFO) << "Save pending update got while running getDifference from " << source; if (td_->updates_manager_->running_get_difference()) { if (!(update->get_id() == dummyUpdate::ID || update->get_id() == updateSentMessage::ID)) { + LOG(ERROR) << "Failed CHECK(\"update->get_id() == dummyUpdate::ID || update->get_id() == updateSentMessage::ID\"). Postponed pts size: " << postponed_pts_updates_.size(); return; } } @@ -22255,7 +22256,10 @@ void MessagesManager::on_get_scheduled_messages_from_database(DialogId dialog_id return; } auto d = get_dialog(dialog_id); - if (d == nullptr) { return; } + if (d == nullptr) { + LOG(ERROR) << "Dialog == nullptr in \"on_get_scheduled_messages_from_database\""; + return; + } d->has_loaded_scheduled_messages_from_database = true; LOG(INFO) << "Receive " << messages.size() << " scheduled messages from database in " << dialog_id;