From 76dbe45ad86341e2ce73e54eb109548d29eb56b6 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Tue, 20 Oct 2020 23:16:24 +0200 Subject: [PATCH] Memory cleanup for caching Remove cached deleted messages from dialogs Comment out unused variables --- td/telegram/ContactsManager.cpp | 12 ++++++------ td/telegram/MessagesManager.cpp | 17 +++++++++++++++++ td/telegram/MessagesManager.h | 2 ++ td/telegram/Td.cpp | 1 + 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 49709f40d..2c8cb5714 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -14539,10 +14539,10 @@ void ContactsManager::memory_cleanup() { { auto it = users_.begin(); while (it != users_.end()) { - auto &user = it->second; + //auto &user = it->second; auto user_id = it->first; - auto is_invalid = it->first.get_time() > user_ttl; + auto is_invalid = user_id.get_time() > user_ttl; if (is_invalid) { user_id.reset_time(); @@ -14572,10 +14572,10 @@ void ContactsManager::memory_cleanup() { { auto it = chats_.begin(); while (it != chats_.end()) { - auto &chat = it->second; + //auto &chat = it->second; auto chat_id = it->first; - auto is_invalid = it->first.get_time() > chat_ttl; + auto is_invalid = chat_id.get_time() > chat_ttl; if (is_invalid) { chat_id.reset_time(); @@ -14600,10 +14600,10 @@ void ContactsManager::memory_cleanup() { { auto it = channels_.begin(); while (it != channels_.end()) { - auto &channel = it->second; + //auto &channel = it->second; auto channel_id = it->first; - auto is_invalid = it->first.get_time() > chat_ttl; + auto is_invalid = channel_id.get_time() > chat_ttl; if (is_invalid) { channel_id.reset_time(); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 4ba626ae1..9e4bdbd1d 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -5732,6 +5732,23 @@ tl_object_ptr MessagesManager::get_input_message(Mes return make_tl_object(message_id.get_server_message_id().get()); } + +void MessagesManager::memory_cleanup() { + /* CLEAR DELETED MESSAGES CACHE */ + { + auto it = dialogs_.begin(); + while (it != dialogs_.end()) { + auto &dialog = it->second; + + auto &deleted_message_ids = dialog->deleted_message_ids; + deleted_message_ids.clear(); + deleted_message_ids.rehash(0); + + it++; + } + } +} + tl_object_ptr MessagesManager::get_input_peer(DialogId dialog_id, AccessRights access_rights) const { switch (dialog_id.get_type()) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 6ee4299a4..4afff3ab5 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -190,6 +190,8 @@ class MessagesManager : public Actor { MessagesManager &operator=(MessagesManager &&) = delete; ~MessagesManager() override; + void memory_cleanup(); + static vector get_message_ids(const vector &input_message_ids); static vector get_server_message_ids(const vector &message_ids); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 5144f9b7a..57ff6a111 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -5234,6 +5234,7 @@ void Td::on_request(uint64 id, td_api::getDatabaseStatistics &request) { } void Td::on_request(uint64 id, td_api::optimizeStorage &request) { + messages_manager_->memory_cleanup(); contacts_manager_->memory_cleanup(); web_pages_manager_->memory_cleanup(); stickers_manager_->memory_cleanup();