From bece21cc3803d779817325915104bc014e9563cb Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 18 Aug 2022 18:52:59 +0300 Subject: [PATCH] Make OptionManager a plain class. --- td/telegram/Global.cpp | 11 +++++------ td/telegram/Global.h | 8 +++----- td/telegram/OptionManager.cpp | 12 +++--------- td/telegram/OptionManager.h | 15 +++++---------- td/telegram/Td.cpp | 8 +++----- td/telegram/Td.h | 3 +-- 6 files changed, 20 insertions(+), 37 deletions(-) diff --git a/td/telegram/Global.cpp b/td/telegram/Global.cpp index a231df11f..79bf898a4 100644 --- a/td/telegram/Global.cpp +++ b/td/telegram/Global.cpp @@ -167,8 +167,7 @@ void Global::update_server_time_difference(double diff) { server_time_difference_was_updated_ = true; do_save_server_time_difference(); - CHECK(Scheduler::instance()); - send_closure(option_manager(), &OptionManager::on_update_server_time_difference); + get_option_manager()->on_update_server_time_difference(); } } @@ -248,13 +247,13 @@ void Global::set_net_query_dispatcher(unique_ptr net_query_d } const OptionManager *Global::get_option_manager() const { - CHECK(!option_manager_.empty()) - return option_manager_.get_actor_unsafe(); + CHECK(option_manager_ != nullptr); + return option_manager_; } OptionManager *Global::get_option_manager() { - CHECK(!option_manager_.empty()) - return option_manager_.get_actor_unsafe(); + CHECK(option_manager_ != nullptr); + return option_manager_; } void Global::set_option_empty(Slice name) { diff --git a/td/telegram/Global.h b/td/telegram/Global.h index d546b2f9d..367eb5fdc 100644 --- a/td/telegram/Global.h +++ b/td/telegram/Global.h @@ -301,10 +301,7 @@ class Global final : public ActorContext { notification_settings_manager_ = notification_settings_manager; } - ActorId option_manager() const { - return option_manager_; - } - void set_option_manager(ActorId option_manager) { + void set_option_manager(OptionManager *option_manager) { option_manager_ = option_manager; } @@ -491,7 +488,6 @@ class Global final : public ActorContext { ActorId messages_manager_; ActorId notification_manager_; ActorId notification_settings_manager_; - ActorId option_manager_; ActorId password_manager_; ActorId secret_chats_manager_; ActorId sponsored_message_manager_; @@ -506,6 +502,8 @@ class Global final : public ActorContext { unique_ptr mtproto_header_; + OptionManager *option_manager_ = nullptr; + TdParameters parameters_; int32 gc_scheduler_id_ = 0; int32 slow_net_scheduler_id_ = 0; diff --git a/td/telegram/OptionManager.cpp b/td/telegram/OptionManager.cpp index 03cfe4852..b2f8091ca 100644 --- a/td/telegram/OptionManager.cpp +++ b/td/telegram/OptionManager.cpp @@ -46,11 +46,8 @@ namespace td { -OptionManager::OptionManager(Td *td, ActorShared<> parent) - : td_(td) - , parent_(std::move(parent)) - , options_(td::make_unique()) - , option_pmc_(G()->td_db()->get_config_pmc_shared()) { +OptionManager::OptionManager(Td *td) + : td_(td), options_(td::make_unique()), option_pmc_(G()->td_db()->get_config_pmc_shared()) { send_unix_time_update(); auto all_options = option_pmc_->get_all(); @@ -106,10 +103,6 @@ OptionManager::OptionManager(Td *td, ActorShared<> parent) } } -void OptionManager::tear_down() { - parent_.reset(); -} - OptionManager::~OptionManager() = default; void OptionManager::set_option_boolean(Slice name, bool value) { @@ -202,6 +195,7 @@ void OptionManager::send_unix_time_update() { } void OptionManager::on_update_server_time_difference() { + // can be called from any thread if (std::abs(G()->get_server_time_difference() - last_sent_server_time_difference_) < 0.5) { return; } diff --git a/td/telegram/OptionManager.h b/td/telegram/OptionManager.h index 464074b36..3263a0a3f 100644 --- a/td/telegram/OptionManager.h +++ b/td/telegram/OptionManager.h @@ -8,12 +8,11 @@ #include "td/telegram/td_api.h" -#include "td/actor/actor.h" - #include "td/utils/common.h" #include "td/utils/Promise.h" #include "td/utils/Slice.h" +#include #include namespace td { @@ -22,15 +21,14 @@ class KeyValueSyncInterface; class Td; class TsSeqKeyValue; -class OptionManager final : public Actor { +class OptionManager { public: - OptionManager(Td *td, ActorShared<> parent); - + explicit OptionManager(Td *td); OptionManager(const OptionManager &) = delete; OptionManager &operator=(const OptionManager &) = delete; OptionManager(OptionManager &&) = delete; OptionManager &operator=(OptionManager &&) = delete; - ~OptionManager() final; + ~OptionManager(); void set_option_boolean(Slice name, bool value); @@ -65,8 +63,6 @@ class OptionManager final : public Actor { void get_current_state(vector> &updates) const; private: - void tear_down() final; - void set_option(Slice name, Slice value); void on_option_updated(Slice name); @@ -84,12 +80,11 @@ class OptionManager final : public Actor { void send_unix_time_update(); Td *td_; - ActorShared<> parent_; unique_ptr options_; std::shared_ptr option_pmc_; - double last_sent_server_time_difference_ = 1e100; + std::atomic last_sent_server_time_difference_{1e100}; }; } // namespace td diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index e368cbe39..3ad7b3ff6 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3294,6 +3294,7 @@ void Td::dec_actor_refcnt() { web_pages_manager_.reset(); LOG(DEBUG) << "WebPagesManager was cleared" << timer; + G()->set_option_manager(nullptr); option_manager_.reset(); LOG(DEBUG) << "OptionManager was cleared" << timer; @@ -3465,8 +3466,6 @@ void Td::clear() { LOG(DEBUG) << "NotificationManager actor was cleared" << timer; notification_settings_manager_actor_.reset(); LOG(DEBUG) << "NotificationSettingsManager actor was cleared" << timer; - option_manager_actor_.reset(); - LOG(DEBUG) << "OptionManager actor was cleared" << timer; poll_manager_actor_.reset(); LOG(DEBUG) << "PollManager actor was cleared" << timer; sponsored_message_manager_actor_.reset(); @@ -3812,9 +3811,8 @@ void Td::init_options_and_network() { G()->set_state_manager(state_manager_.get()); VLOG(td_init) << "Create OptionManager"; - option_manager_ = make_unique(this, create_reference()); - option_manager_actor_ = register_actor("OptionManager", option_manager_.get()); - G()->set_option_manager(option_manager_actor_.get()); + option_manager_ = make_unique(this); + G()->set_option_manager(option_manager_.get()); init_connection_creator(); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 9bb01a0a0..271d4aac3 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -133,6 +133,7 @@ class Td final : public Actor { unique_ptr audios_manager_; unique_ptr callback_queries_manager_; unique_ptr documents_manager_; + unique_ptr option_manager_; unique_ptr video_notes_manager_; unique_ptr videos_manager_; @@ -168,8 +169,6 @@ class Td final : public Actor { ActorOwn notification_manager_actor_; unique_ptr notification_settings_manager_; ActorOwn notification_settings_manager_actor_; - unique_ptr option_manager_; - ActorOwn option_manager_actor_; unique_ptr poll_manager_; ActorOwn poll_manager_actor_; unique_ptr sponsored_message_manager_;