diff --git a/td/telegram/FileReferenceManager.cpp b/td/telegram/FileReferenceManager.cpp index 01ebd169..e4e23c65 100644 --- a/td/telegram/FileReferenceManager.cpp +++ b/td/telegram/FileReferenceManager.cpp @@ -364,4 +364,11 @@ void FileReferenceManager::reload_photo(PhotoSizeSource source, Promise pr } } +void FileReferenceManager::memory_cleanup(FileId file_id) { + auto &node = nodes_[file_id]; + node.query.reset(); + node.file_source_ids.reset_position(); + nodes_.erase(file_id); +} + } // namespace td diff --git a/td/telegram/FileReferenceManager.h b/td/telegram/FileReferenceManager.h index f7d2d4ed..99390a9d 100644 --- a/td/telegram/FileReferenceManager.h +++ b/td/telegram/FileReferenceManager.h @@ -38,6 +38,8 @@ class FileReferenceManager : public Actor { static bool is_file_reference_error(const Status &error); static size_t get_file_reference_error_pos(const Status &error); + void memory_cleanup(FileId file_id); + FileSourceId create_message_file_source(FullMessageId full_message_id); FileSourceId create_user_photo_file_source(UserId user_id, int64 photo_id); FileSourceId create_chat_photo_file_source(ChatId chat_id); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index c4493a33..567d6cf0 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -4313,6 +4313,10 @@ void Td::init_file_manager() { send_closure(G()->storage_manager(), &StorageManager::on_new_file, size, real_size, cnt); } + void destroy_file_source(FileId file_id) final { + td_->file_reference_manager_->memory_cleanup(file_id); + } + void on_file_updated(FileId file_id) final { send_closure(G()->td(), &Td::send_update, make_tl_object(td_->file_manager_->get_file_object(file_id))); diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index 6397b8e4..4919b060 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -3495,6 +3495,9 @@ void FileManager::memory_cleanup() { } } + /* DESTROY FILE REFERENCE */ + context_->destroy_file_source(node->main_file_id_); + /* DESTROY MAIN FILE */ empty_file_ids_.push_back(i); file_id_info_[i] = FileIdInfo(); diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index d7497443..05618e64 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -369,6 +369,8 @@ class FileManager : public FileLoadManager::Callback { virtual void on_file_updated(FileId size) = 0; + virtual void destroy_file_source(FileId file_id) = 0; + virtual bool add_file_source(FileId file_id, FileSourceId file_source_id) = 0; virtual bool remove_file_source(FileId file_id, FileSourceId file_source_id) = 0;