diff --git a/td/telegram/PollManager.cpp b/td/telegram/PollManager.cpp index 886f91f92..8d8832615 100644 --- a/td/telegram/PollManager.cpp +++ b/td/telegram/PollManager.cpp @@ -732,6 +732,8 @@ void PollManager::do_stop_poll(PollId poll_id, FullMessageId full_message_id, ui logevent_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::StopPoll, storer); } + bool is_inserted = being_closed_polls_.insert(poll_id).second; + CHECK(is_inserted); auto new_promise = get_erase_logevent_promise(logevent_id, std::move(promise)); send_closure(td_->create_net_actor(std::move(new_promise)), &StopPollActor::send, full_message_id); @@ -890,7 +892,7 @@ PollId PollManager::on_get_poll(PollId poll_id, tl_object_ptrflags_ & telegram_api::poll::CLOSED_MASK) != 0; - if (is_closed != poll->is_closed) { + if (is_closed && !poll->is_closed) { poll->is_closed = is_closed; is_changed = true; } @@ -964,11 +966,9 @@ PollId PollManager::on_get_poll(PollId poll_id, tl_object_ptrtd(), &Td::send_update, - td_api::make_object(get_poll_object(poll_id, poll))); - } + } + if (need_update_poll && (is_changed || (poll->is_closed && being_closed_polls_.erase(poll_id) != 0))) { + send_closure(G()->td(), &Td::send_update, td_api::make_object(get_poll_object(poll_id, poll))); } return poll_id; } diff --git a/td/telegram/PollManager.h b/td/telegram/PollManager.h index 64a3f02b7..5814c364b 100644 --- a/td/telegram/PollManager.h +++ b/td/telegram/PollManager.h @@ -170,6 +170,8 @@ class PollManager : public Actor { uint64 current_generation_ = 0; std::unordered_set loaded_from_database_polls_; + + std::unordered_set being_closed_polls_; }; } // namespace td