Fix calling file load callbacks on closing.
GitOrigin-RevId: 1b1bad8bdd255332cdca2ece6cffd3ce16cfc7e2
This commit is contained in:
parent
0ad0079900
commit
3f8be23cd2
@ -6781,8 +6781,6 @@ void ContactsManager::on_update_user_links(UserId user_id, tl_object_ptr<telegra
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ContactsManager::on_update_user_links(User *u, UserId user_id, LinkState outbound, LinkState inbound) {
|
void ContactsManager::on_update_user_links(User *u, UserId user_id, LinkState outbound, LinkState inbound) {
|
||||||
LOG(DEBUG) << "Update " << user_id << " links from (" << u->outbound << ", " << u->inbound << ") to (" << outbound
|
|
||||||
<< ", " << inbound << ")";
|
|
||||||
UserId my_id = get_my_id("on_update_user_links");
|
UserId my_id = get_my_id("on_update_user_links");
|
||||||
if (user_id == my_id) {
|
if (user_id == my_id) {
|
||||||
if (outbound == LinkState::None && !td_->auth_manager_->is_bot()) {
|
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;
|
inbound = outbound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG(DEBUG) << "Update " << user_id << " links from (" << u->outbound << ", " << u->inbound << ") to (" << outbound
|
||||||
|
<< ", " << inbound << ")";
|
||||||
bool need_send_update = false;
|
bool need_send_update = false;
|
||||||
if (outbound != u->outbound && outbound != LinkState::Unknown) {
|
if (outbound != u->outbound && outbound != LinkState::Unknown) {
|
||||||
need_send_update |= outbound != LinkState::None || u->outbound != LinkState::Unknown;
|
need_send_update |= outbound != LinkState::None || u->outbound != LinkState::Unknown;
|
||||||
|
@ -39,7 +39,7 @@ class GetSecureValue : public NetQueryCallback {
|
|||||||
optional<EncryptedSecureValue> encrypted_secure_value_;
|
optional<EncryptedSecureValue> encrypted_secure_value_;
|
||||||
optional<secure_storage::Secret> secret_;
|
optional<secure_storage::Secret> secret_;
|
||||||
|
|
||||||
void on_error(Status status);
|
void on_error(Status error);
|
||||||
void on_secret(Result<secure_storage::Secret> r_secret, bool dummy);
|
void on_secret(Result<secure_storage::Secret> r_secret, bool dummy);
|
||||||
void loop() override;
|
void loop() override;
|
||||||
void start_up() override;
|
void start_up() override;
|
||||||
@ -58,7 +58,7 @@ class GetAllSecureValues : public NetQueryCallback {
|
|||||||
optional<vector<EncryptedSecureValue>> encrypted_secure_values_;
|
optional<vector<EncryptedSecureValue>> encrypted_secure_values_;
|
||||||
optional<secure_storage::Secret> secret_;
|
optional<secure_storage::Secret> secret_;
|
||||||
|
|
||||||
void on_error(Status status);
|
void on_error(Status error);
|
||||||
void on_secret(Result<secure_storage::Secret> r_secret, bool dummy);
|
void on_secret(Result<secure_storage::Secret> r_secret, bool dummy);
|
||||||
void loop() override;
|
void loop() override;
|
||||||
void start_up() override;
|
void start_up() override;
|
||||||
@ -98,13 +98,13 @@ class SetSecureValue : public NetQueryCallback {
|
|||||||
void on_upload_ok(FileId file_id, tl_object_ptr<telegram_api::InputFile> input_file) override;
|
void on_upload_ok(FileId file_id, tl_object_ptr<telegram_api::InputFile> input_file) override;
|
||||||
void on_upload_encrypted_ok(FileId file_id, tl_object_ptr<telegram_api::InputEncryptedFile> input_file) override;
|
void on_upload_encrypted_ok(FileId file_id, tl_object_ptr<telegram_api::InputEncryptedFile> input_file) override;
|
||||||
void on_upload_secure_ok(FileId file_id, tl_object_ptr<telegram_api::InputSecureFile> input_file) override;
|
void on_upload_secure_ok(FileId file_id, tl_object_ptr<telegram_api::InputSecureFile> 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<telegram_api::InputSecureFile> input_file);
|
void on_upload_ok(FileId file_id, tl_object_ptr<telegram_api::InputSecureFile> 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<secure_storage::Secret> r_secret, bool x);
|
void on_secret(Result<secure_storage::Secret> 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)) {
|
: parent_(std::move(parent)), password_(std::move(password)), type_(type), promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetSecureValue::on_error(Status status) {
|
void GetSecureValue::on_error(Status error) {
|
||||||
if (status.code() != 0) {
|
if (error.code() != 0) {
|
||||||
promise_.set_error(std::move(status));
|
promise_.set_error(std::move(error));
|
||||||
} else {
|
} else {
|
||||||
promise_.set_error(Status::Error(400, status.message()));
|
promise_.set_error(Status::Error(400, error.message()));
|
||||||
}
|
}
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
@ -230,11 +230,11 @@ GetAllSecureValues::GetAllSecureValues(ActorShared<> parent, std::string passwor
|
|||||||
: parent_(std::move(parent)), password_(std::move(password)), promise_(std::move(promise)) {
|
: parent_(std::move(parent)), password_(std::move(password)), promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetAllSecureValues::on_error(Status status) {
|
void GetAllSecureValues::on_error(Status error) {
|
||||||
if (status.code() != 0) {
|
if (error.code() != 0) {
|
||||||
promise_.set_error(std::move(status));
|
promise_.set_error(std::move(error));
|
||||||
} else {
|
} else {
|
||||||
promise_.set_error(Status::Error(400, status.message()));
|
promise_.set_error(Status::Error(400, error.message()));
|
||||||
}
|
}
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
@ -302,14 +302,17 @@ void SetSecureValue::UploadCallback::on_upload_ok(FileId file_id, tl_object_ptr<
|
|||||||
CHECK(input_file == nullptr);
|
CHECK(input_file == nullptr);
|
||||||
send_closure_later(actor_id_, &SetSecureValue::on_upload_ok, file_id, nullptr);
|
send_closure_later(actor_id_, &SetSecureValue::on_upload_ok, file_id, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSecureValue::UploadCallback::on_upload_encrypted_ok(
|
void SetSecureValue::UploadCallback::on_upload_encrypted_ok(
|
||||||
FileId file_id, tl_object_ptr<telegram_api::InputEncryptedFile> input_file) {
|
FileId file_id, tl_object_ptr<telegram_api::InputEncryptedFile> input_file) {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSecureValue::UploadCallback::on_upload_secure_ok(FileId file_id,
|
void SetSecureValue::UploadCallback::on_upload_secure_ok(FileId file_id,
|
||||||
tl_object_ptr<telegram_api::InputSecureFile> input_file) {
|
tl_object_ptr<telegram_api::InputSecureFile> input_file) {
|
||||||
send_closure_later(actor_id_, &SetSecureValue::on_upload_ok, file_id, std::move(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) {
|
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));
|
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_ptr<telegram_api::In
|
|||||||
info.input_file = std::move(input_file);
|
info.input_file = std::move(input_file);
|
||||||
CHECK(files_left_to_upload_ != 0);
|
CHECK(files_left_to_upload_ != 0);
|
||||||
files_left_to_upload_--;
|
files_left_to_upload_--;
|
||||||
return loop();
|
loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSecureValue::on_upload_error(FileId file_id, Status error) {
|
void SetSecureValue::on_upload_error(FileId file_id, Status error) {
|
||||||
return on_error(std::move(error));
|
on_error(std::move(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSecureValue::on_error(Status status) {
|
void SetSecureValue::on_error(Status error) {
|
||||||
if (status.code() != 0) {
|
if (error.code() != 0) {
|
||||||
promise_.set_error(std::move(status));
|
promise_.set_error(std::move(error));
|
||||||
} else {
|
} else {
|
||||||
promise_.set_error(Status::Error(400, status.message()));
|
promise_.set_error(Status::Error(400, error.message()));
|
||||||
}
|
}
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
@ -603,11 +606,11 @@ class GetPassportAuthorizationForm : public NetQueryCallback {
|
|||||||
loop();
|
loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_error(Status status) {
|
void on_error(Status error) {
|
||||||
if (status.code() != 0) {
|
if (error.code() != 0) {
|
||||||
promise_.set_error(std::move(status));
|
promise_.set_error(std::move(error));
|
||||||
} else {
|
} else {
|
||||||
promise_.set_error(Status::Error(400, status.message()));
|
promise_.set_error(Status::Error(400, error.message()));
|
||||||
}
|
}
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
@ -266,11 +266,8 @@ void FileLoadManager::hangup_shared() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FileLoadManager::loop() {
|
void FileLoadManager::loop() {
|
||||||
if (stop_flag_) {
|
if (stop_flag_ && nodes_container_.empty()) {
|
||||||
if (nodes_container_.empty()) {
|
stop();
|
||||||
stop();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
#include "td/telegram/files/FileLoaderUtils.h"
|
#include "td/telegram/files/FileLoaderUtils.h"
|
||||||
#include "td/telegram/files/FileLocation.h"
|
#include "td/telegram/files/FileLocation.h"
|
||||||
#include "td/telegram/files/FileUploader.h"
|
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
#include "td/telegram/misc.h"
|
#include "td/telegram/misc.h"
|
||||||
#include "td/telegram/Td.h"
|
#include "td/telegram/Td.h"
|
||||||
@ -2309,7 +2308,7 @@ void FileManager::on_error(QueryId query_id, Status status) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query.type_ == Query::UploadByHash) {
|
if (query.type_ == Query::UploadByHash && !G()->close_flag()) {
|
||||||
LOG(INFO) << "Upload By Hash failed: " << status << ", restart upload";
|
LOG(INFO) << "Upload By Hash failed: " << status << ", restart upload";
|
||||||
node->get_by_hash_ = false;
|
node->get_by_hash_ = false;
|
||||||
run_upload(node, {});
|
run_upload(node, {});
|
||||||
@ -2322,7 +2321,7 @@ void FileManager::on_error_impl(FileNodePtr node, FileManager::Query::Type type,
|
|||||||
SCOPE_EXIT {
|
SCOPE_EXIT {
|
||||||
try_flush_node(node);
|
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
|
LOG(WARNING) << "Failed to upload/download/generate file: " << status << ". Query type = " << type
|
||||||
<< ". File type is " << file_type_name[static_cast<int32>(FileView(node).get_type())];
|
<< ". File type is " << file_type_name[static_cast<int32>(FileView(node).get_type())];
|
||||||
if (status.code() == 0) {
|
if (status.code() == 0) {
|
||||||
@ -2421,6 +2420,12 @@ void FileManager::hangup() {
|
|||||||
file_db_.reset();
|
file_db_.reset();
|
||||||
file_generate_manager_.reset();
|
file_generate_manager_.reset();
|
||||||
file_load_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();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,6 +185,7 @@ Status FileUploader::on_ok(int64 size) {
|
|||||||
}
|
}
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileUploader::on_error(Status status) {
|
void FileUploader::on_error(Status status) {
|
||||||
fd_.close();
|
fd_.close();
|
||||||
if (is_temp_) {
|
if (is_temp_) {
|
||||||
|
Reference in New Issue
Block a user