diff options
| -rw-r--r-- | td/telegram/MessagesManager.cpp | 11 | ||||
| -rw-r--r-- | tdactor/td/actor/impl/Scheduler-decl.h | 3 | ||||
| -rw-r--r-- | tdactor/td/actor/impl/Scheduler.h | 9 |
3 files changed, 19 insertions, 4 deletions
diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 93abeeb71..fe85e08e3 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -6850,7 +6850,6 @@ void MessagesManager::add_postponed_channel_update(DialogId dialog_id, tl_object void MessagesManager::add_pending_channel_update(DialogId dialog_id, tl_object_ptr<telegram_api::Update> &&update, int32 new_pts, int32 pts_count, Promise<Unit> &&promise, const char *source, bool is_postponed_update) { - LOG(INFO) << "Receive from " << source << " pending " << to_string(update); CHECK(update != nullptr); if (dialog_id.get_type() != DialogType::Channel) { LOG(ERROR) << "Receive channel update in invalid " << dialog_id << " from " << source << ": " @@ -6894,7 +6893,8 @@ void MessagesManager::add_pending_channel_update(DialogId dialog_id, tl_object_p } if (d == nullptr) { // if there is no dialog, it can be created by the update - LOG(INFO) << "Receive pending update from " << source << " about unknown " << dialog_id; + LOG(INFO) << "Receive from " << source << " pending update about unknown " << dialog_id << ": " + << to_string(update); if (running_get_channel_difference(dialog_id)) { add_postponed_channel_update(dialog_id, std::move(update), new_pts, pts_count, std::move(promise)); return; @@ -6931,11 +6931,13 @@ void MessagesManager::add_pending_channel_update(DialogId dialog_id, tl_object_p LOG_IF(WARNING, new_pts == old_pts && pts_count == 0 && !is_allowed_useless_update(update)) << "Receive from " << source << " useless channel update " << oneline(to_string(update)); - LOG(INFO) << "Skip already applied channel update"; + LOG(INFO) << "Skip already applied channel update with PTS " << new_pts << " from " << source; + Scheduler::instance()->destroy_on_scheduler_unique_ptr(G()->get_gc_scheduler_id(), update); promise.set_value(Unit()); return; } + LOG(INFO) << "Receive from " << source << " pending " << to_string(update); if (running_get_channel_difference(dialog_id)) { LOG(INFO) << "Postpone channel update, because getChannelDifference is run"; add_postponed_channel_update(dialog_id, std::move(update), new_pts, pts_count, std::move(promise)); @@ -15360,7 +15362,8 @@ bool MessagesManager::load_dialog(DialogId dialog_id, int left_tries, Promise<Un } bool need_load = !have_dialog_force(dialog_id, "load_dialog"); - if (!need_load && td_->auth_manager_->is_bot() && dialog_id.get_type() == DialogType::User && !td_->user_manager_->have_user(dialog_id.get_user_id())) { + if (!need_load && td_->auth_manager_->is_bot() && dialog_id.get_type() == DialogType::User && + !td_->user_manager_->have_user(dialog_id.get_user_id())) { need_load = true; } if (need_load) { diff --git a/tdactor/td/actor/impl/Scheduler-decl.h b/tdactor/td/actor/impl/Scheduler-decl.h index 581b39797..a91dd00cf 100644 --- a/tdactor/td/actor/impl/Scheduler-decl.h +++ b/tdactor/td/actor/impl/Scheduler-decl.h @@ -103,6 +103,9 @@ class Scheduler { template <class T> void destroy_on_scheduler(int32 sched_id, T &value); + template <class T> + void destroy_on_scheduler_unique_ptr(int32 sched_id, T &value); + template <class... ArgsT> void destroy_on_scheduler(int32 sched_id, ArgsT &...values); diff --git a/tdactor/td/actor/impl/Scheduler.h b/tdactor/td/actor/impl/Scheduler.h index 2158a2406..0c802f42b 100644 --- a/tdactor/td/actor/impl/Scheduler.h +++ b/tdactor/td/actor/impl/Scheduler.h @@ -158,6 +158,15 @@ void Scheduler::destroy_on_scheduler(int32 sched_id, T &value) { } } +template <class T> +void Scheduler::destroy_on_scheduler_unique_ptr(int32 sched_id, T &value) { + if (value != nullptr) { + destroy_on_scheduler_impl(sched_id, PromiseCreator::lambda([value = std::move(value)](Unit) { + // destroy value + })); + } +} + template <class... ArgsT> void Scheduler::destroy_on_scheduler(int32 sched_id, ArgsT &...values) { destroy_on_scheduler_impl(sched_id, PromiseCreator::lambda([values = std::make_tuple(std::move(values)...)](Unit) { |
