diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index 6acdb749..2c698d83 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -3714,29 +3714,29 @@ void FileManager::memory_cleanup() { is_closed_ = true; auto time = std::time(nullptr); - for (unsigned int i = 1; i < file_id_info_.size(); i++) { - if (time - file_id_insert_time_[i] > 5 /* DELETE FILES OLDER THAN X SECONDS */) { - empty_file_ids_.push_back(i); - file_id_insert_time_[i] = INT64_MAX; + for (unsigned int i = 0; i < file_id_info_.size(); i++) { + auto &node = file_nodes_[file_id_info_[i].node_id_]; - auto &node = file_nodes_[file_id_info_[i].node_id_]; + if (node != nullptr && ((int32) i) == node->main_file_id_.get()) { + if (time - file_id_insert_time_[i] > 5 /* MAIN FILE TTL */) { + for (auto &file_id : node->file_ids_) { - if (node != nullptr) { - node->set_upload_priority(0); - node->set_download_priority(0); - node->set_generate_priority(0, 0); - } + /* DESTROY QUERIES */ + for (auto &query_id : queries_container_.ids()) { + auto query = queries_container_.get(query_id); + if (((int32) i) == query->file_id_.get()) { + on_error(query_id, Status::Error(500, "FILE_MANAGER_RESTART")); + } + } - file_nodes_[file_id_info_[i].node_id_] = nullptr; - file_id_info_[i].node_id_ = 0; - } - } + /* DESTROY FILE */ + try_forget_file_id(file_id); + } - for (auto &empty_id : empty_file_ids_) { - for (auto &query_id : queries_container_.ids()) { - auto query = queries_container_.get(query_id); - if (query->file_id_.get() == empty_id) { - on_error(query_id, Status::Error(500, "FILE_MANAGER_RESTART")); + /* DESTROY MAIN FILE */ + file_id_insert_time_[i] = INT64_MAX; + file_id_info_[i] = FileIdInfo(); + file_nodes_[file_id_info_[i].node_id_] = nullptr; } } }