diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index ce41276ac..70bdbe720 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -6143,6 +6143,23 @@ void MessagesManager::skip_old_pending_update(tl_object_ptr::max(); + if (!pending_pts_updates_.empty()) { + auto pts = pending_pts_updates_.begin()->first; + if (pts < result) { + result = pts; + } + } + if (!postponed_pts_updates_.empty()) { + auto pts = postponed_pts_updates_.begin()->first; + if (pts < result) { + result = pts; + } + } + return result; +} + void MessagesManager::add_pending_update(tl_object_ptr &&update, int32 new_pts, int32 pts_count, bool force_apply, Promise &&promise, const char *source) { // do not try to run getDifference from this function diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 987a184d2..9417fce5e 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -788,6 +788,8 @@ class MessagesManager : public Actor { tl_object_ptr get_messages_object(int32 total_count, const vector &full_message_ids, bool skip_not_found); + int32 get_min_pending_pts() const; + void add_pending_update(tl_object_ptr &&update, int32 new_pts, int32 pts_count, bool force_apply, Promise &&promise, const char *source); diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index 35f9b970b..814aadf4d 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -183,11 +183,30 @@ void UpdatesManager::tear_down() { } void UpdatesManager::fill_pts_gap(void *td) { - fill_gap(td, "pts"); + CHECK(td != nullptr); + if (G()->close_flag()) { + return; + } + + auto td_ptr = static_cast(td); + string source = PSTRING() << "pts from " << td_ptr->updates_manager_->get_pts() << " to " + << td_ptr->messages_manager_->get_min_pending_pts(); + fill_gap(td, source.c_str()); } void UpdatesManager::fill_seq_gap(void *td) { - fill_gap(td, "seq"); + CHECK(td != nullptr); + if (G()->close_flag()) { + return; + } + + auto td_ptr = static_cast(td); + auto seq = std::numeric_limits::max(); + if (!td_ptr->updates_manager_->pending_seq_updates_.empty()) { + seq = td_ptr->updates_manager_->pending_seq_updates_.begin()->first; + } + string source = PSTRING() << "seq from " << td_ptr->updates_manager_->seq_ << " to " << seq; + fill_gap(td, source.c_str()); } void UpdatesManager::fill_qts_gap(void *td) {