Improve Td closing.
GitOrigin-RevId: 9111edb11ffe14ee9fa80942a4201fec94641b56
This commit is contained in:
parent
ae3c1208ea
commit
bcacb2c31c
@ -3864,6 +3864,11 @@ void Td::start_up() {
|
||||
LOG_IF(FATAL, symbol != c) << "TDLib requires little-endian platform";
|
||||
}
|
||||
|
||||
VLOG(td_init) << "Create Global";
|
||||
set_context(std::make_shared<Global>());
|
||||
inc_request_actor_refcnt(); // guard
|
||||
inc_actor_refcnt(); // guard
|
||||
|
||||
alarm_timeout_.set_callback(on_alarm_timeout_callback);
|
||||
alarm_timeout_.set_callback_data(static_cast<void *>(this));
|
||||
|
||||
@ -3893,6 +3898,7 @@ void Td::hangup_shared() {
|
||||
}
|
||||
|
||||
void Td::hangup() {
|
||||
LOG(INFO) << "Receive Td::hangup";
|
||||
close();
|
||||
dec_stop_cnt();
|
||||
}
|
||||
@ -4136,25 +4142,25 @@ void Td::close_impl(bool destroy_flag) {
|
||||
if (close_flag_) {
|
||||
return;
|
||||
}
|
||||
if (state_ == State::WaitParameters) {
|
||||
|
||||
LOG(WARNING) << (destroy_flag ? "Destroy" : "Close") << " Td in state " << static_cast<int32>(state_);
|
||||
if (state_ == State::WaitParameters || state_ == State::Decrypt) {
|
||||
clear_requests();
|
||||
state_ = State::Close;
|
||||
return on_closed();
|
||||
}
|
||||
if (state_ == State::Decrypt) {
|
||||
clear_requests();
|
||||
if (destroy_flag) {
|
||||
if (destroy_flag && state_ == State::Decrypt) {
|
||||
TdDb::destroy(parameters_).ignore();
|
||||
}
|
||||
state_ = State::Close;
|
||||
close_flag_ = 4;
|
||||
return dec_actor_refcnt();
|
||||
G()->set_close_flag();
|
||||
|
||||
request_actors_.clear();
|
||||
return send_closure_later(actor_id(this), &Td::dec_request_actor_refcnt); // remove guard
|
||||
}
|
||||
|
||||
state_ = State::Close;
|
||||
close_flag_ = 1;
|
||||
G()->set_close_flag();
|
||||
send_closure(auth_manager_actor_, &AuthManager::on_closing, destroy_flag);
|
||||
LOG(WARNING) << "Close " << tag("destroy", destroy_flag);
|
||||
|
||||
// wait till all request_actors will stop.
|
||||
request_actors_.clear();
|
||||
@ -4781,11 +4787,6 @@ Status Td::set_parameters(td_api::object_ptr<td_api::tdlibParameters> parameters
|
||||
TRY_RESULT(encryption_info, TdDb::check_encryption(parameters_));
|
||||
is_database_encrypted_ = encryption_info.is_encrypted;
|
||||
|
||||
VLOG(td_init) << "Create Global";
|
||||
set_context(std::make_shared<Global>());
|
||||
inc_request_actor_refcnt(); // guard
|
||||
inc_actor_refcnt(); // guard
|
||||
|
||||
VLOG(td_init) << "Create MtprotoHeader::Options";
|
||||
options_.api_id = parameters->api_id_;
|
||||
options_.system_language_code = trim(parameters->system_language_code_);
|
||||
|
@ -829,6 +829,8 @@ class CliClient final : public Actor {
|
||||
bad_parameters->api_id_ = api_id_;
|
||||
bad_parameters->api_hash_ = api_hash_;
|
||||
send_request(td_api::make_object<td_api::setTdlibParameters>(std::move(bad_parameters)));
|
||||
|
||||
send_closure_later(actor_id(this), &CliClient::create_td, Slice("ClientActor3"));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user