From 3f8be23cd27db2c5fcc93d8a479a39cf460ad5b6 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 24 May 2018 01:30:47 +0300 Subject: [PATCH] Fix calling file load callbacks on closing. GitOrigin-RevId: 1b1bad8bdd255332cdca2ece6cffd3ce16cfc7e2 --- td/telegram/ContactsManager.cpp | 4 +-- td/telegram/SecureManager.cpp | 49 ++++++++++++++------------- td/telegram/files/FileLoadManager.cpp | 7 ++-- td/telegram/files/FileManager.cpp | 11 ++++-- td/telegram/files/FileUploader.cpp | 1 + 5 files changed, 39 insertions(+), 33 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index c86c625d..f58b6f09 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -6781,8 +6781,6 @@ void ContactsManager::on_update_user_links(UserId user_id, tl_object_ptroutbound << ", " << u->inbound << ") to (" << outbound - << ", " << inbound << ")"; UserId my_id = get_my_id("on_update_user_links"); if (user_id == my_id) { if (outbound == LinkState::None && !td_->auth_manager_->is_bot()) { @@ -6791,6 +6789,8 @@ void ContactsManager::on_update_user_links(User *u, UserId user_id, LinkState ou inbound = outbound; } + LOG(DEBUG) << "Update " << user_id << " links from (" << u->outbound << ", " << u->inbound << ") to (" << outbound + << ", " << inbound << ")"; bool need_send_update = false; if (outbound != u->outbound && outbound != LinkState::Unknown) { need_send_update |= outbound != LinkState::None || u->outbound != LinkState::Unknown; diff --git a/td/telegram/SecureManager.cpp b/td/telegram/SecureManager.cpp index 45588ff2..4c792f05 100644 --- a/td/telegram/SecureManager.cpp +++ b/td/telegram/SecureManager.cpp @@ -39,7 +39,7 @@ class GetSecureValue : public NetQueryCallback { optional encrypted_secure_value_; optional secret_; - void on_error(Status status); + void on_error(Status error); void on_secret(Result r_secret, bool dummy); void loop() override; void start_up() override; @@ -58,7 +58,7 @@ class GetAllSecureValues : public NetQueryCallback { optional> encrypted_secure_values_; optional secret_; - void on_error(Status status); + void on_error(Status error); void on_secret(Result r_secret, bool dummy); void loop() override; void start_up() override; @@ -98,13 +98,13 @@ class SetSecureValue : public NetQueryCallback { void on_upload_ok(FileId file_id, tl_object_ptr input_file) override; void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override; void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override; - void on_upload_error(FileId file_id, Status error) override; + void on_upload_error(FileId file_id, Status status) override; }; void on_upload_ok(FileId file_id, tl_object_ptr input_file); - void on_upload_error(FileId file_id, Status error); + void on_upload_error(FileId file_id, Status status); - void on_error(Status status); + void on_error(Status error); void on_secret(Result r_secret, bool x); @@ -157,11 +157,11 @@ GetSecureValue::GetSecureValue(ActorShared<> parent, std::string password, Secur : parent_(std::move(parent)), password_(std::move(password)), type_(type), promise_(std::move(promise)) { } -void GetSecureValue::on_error(Status status) { - if (status.code() != 0) { - promise_.set_error(std::move(status)); +void GetSecureValue::on_error(Status error) { + if (error.code() != 0) { + promise_.set_error(std::move(error)); } else { - promise_.set_error(Status::Error(400, status.message())); + promise_.set_error(Status::Error(400, error.message())); } stop(); } @@ -230,11 +230,11 @@ GetAllSecureValues::GetAllSecureValues(ActorShared<> parent, std::string passwor : parent_(std::move(parent)), password_(std::move(password)), promise_(std::move(promise)) { } -void GetAllSecureValues::on_error(Status status) { - if (status.code() != 0) { - promise_.set_error(std::move(status)); +void GetAllSecureValues::on_error(Status error) { + if (error.code() != 0) { + promise_.set_error(std::move(error)); } else { - promise_.set_error(Status::Error(400, status.message())); + promise_.set_error(Status::Error(400, error.message())); } stop(); } @@ -302,14 +302,17 @@ void SetSecureValue::UploadCallback::on_upload_ok(FileId file_id, tl_object_ptr< CHECK(input_file == nullptr); send_closure_later(actor_id_, &SetSecureValue::on_upload_ok, file_id, nullptr); } + void SetSecureValue::UploadCallback::on_upload_encrypted_ok( FileId file_id, tl_object_ptr input_file) { UNREACHABLE(); } + void SetSecureValue::UploadCallback::on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) { send_closure_later(actor_id_, &SetSecureValue::on_upload_ok, file_id, std::move(input_file)); } + void SetSecureValue::UploadCallback::on_upload_error(FileId file_id, Status error) { send_closure_later(actor_id_, &SetSecureValue::on_upload_error, file_id, std::move(error)); } @@ -337,18 +340,18 @@ void SetSecureValue::on_upload_ok(FileId file_id, tl_object_ptrclose_flag()) { LOG(INFO) << "Upload By Hash failed: " << status << ", restart upload"; node->get_by_hash_ = false; run_upload(node, {}); @@ -2322,7 +2321,7 @@ void FileManager::on_error_impl(FileNodePtr node, FileManager::Query::Type type, SCOPE_EXIT { try_flush_node(node); }; - if (status.code() != 1) { + if (status.code() != 1 && !G()->close_flag()) { LOG(WARNING) << "Failed to upload/download/generate file: " << status << ". Query type = " << type << ". File type is " << file_type_name[static_cast(FileView(node).get_type())]; if (status.code() == 0) { @@ -2421,6 +2420,12 @@ void FileManager::hangup() { file_db_.reset(); file_generate_manager_.reset(); file_load_manager_.reset(); + while (!queries_container_.empty()) { + auto ids = queries_container_.ids(); + for (auto id : ids) { + on_error(id, Status::Error(500, "Internal Server Error: closing")); + } + } stop(); } diff --git a/td/telegram/files/FileUploader.cpp b/td/telegram/files/FileUploader.cpp index 2e8ac041..d583b8f7 100644 --- a/td/telegram/files/FileUploader.cpp +++ b/td/telegram/files/FileUploader.cpp @@ -185,6 +185,7 @@ Status FileUploader::on_ok(int64 size) { } return Status::OK(); } + void FileUploader::on_error(Status status) { fd_.close(); if (is_temp_) {