Remove race in default_join_as updating.

This commit is contained in:
levlam 2021-03-08 15:27:47 +03:00
parent 4eab57cd7b
commit 159c4f3f00
4 changed files with 17 additions and 7 deletions

View File

@ -10334,7 +10334,7 @@ void ContactsManager::on_get_chat_full(tl_object_ptr<telegram_api::ChatFull> &&c
// use send closure later to not crete synchronously default_join_group_call_as_dialog_id // use send closure later to not crete synchronously default_join_group_call_as_dialog_id
send_closure_later(G()->messages_manager(), send_closure_later(G()->messages_manager(),
&MessagesManager::on_update_dialog_default_join_group_call_as_dialog_id, DialogId(chat_id), &MessagesManager::on_update_dialog_default_join_group_call_as_dialog_id, DialogId(chat_id),
default_join_group_call_as_dialog_id); default_join_group_call_as_dialog_id, false);
} }
{ {
MessageTtlSetting message_ttl_setting; MessageTtlSetting message_ttl_setting;
@ -10543,7 +10543,7 @@ void ContactsManager::on_get_chat_full(tl_object_ptr<telegram_api::ChatFull> &&c
// use send closure later to not crete synchronously default_join_group_call_as_dialog_id // use send closure later to not crete synchronously default_join_group_call_as_dialog_id
send_closure_later(G()->messages_manager(), send_closure_later(G()->messages_manager(),
&MessagesManager::on_update_dialog_default_join_group_call_as_dialog_id, DialogId(channel_id), &MessagesManager::on_update_dialog_default_join_group_call_as_dialog_id, DialogId(channel_id),
default_join_group_call_as_dialog_id); default_join_group_call_as_dialog_id, false);
} }
if (participant_count >= 190) { if (participant_count >= 190) {

View File

@ -1680,7 +1680,8 @@ void GroupCallManager::join_group_call(GroupCallId group_call_id, DialogId as_di
as_dialog_id = DialogId(td_->contacts_manager_->get_my_id()); as_dialog_id = DialogId(td_->contacts_manager_->get_my_id());
} }
if (group_call->dialog_id.is_valid()) { if (group_call->dialog_id.is_valid()) {
td_->messages_manager_->on_update_dialog_default_join_group_call_as_dialog_id(group_call->dialog_id, as_dialog_id); td_->messages_manager_->on_update_dialog_default_join_group_call_as_dialog_id(group_call->dialog_id, as_dialog_id,
true);
} else { } else {
td_->messages_manager_->force_create_dialog(as_dialog_id, "join_group_call"); td_->messages_manager_->force_create_dialog(as_dialog_id, "join_group_call");
} }

View File

@ -29791,12 +29791,20 @@ void MessagesManager::on_update_dialog_group_call_id(DialogId dialog_id, InputGr
} }
void MessagesManager::on_update_dialog_default_join_group_call_as_dialog_id(DialogId dialog_id, void MessagesManager::on_update_dialog_default_join_group_call_as_dialog_id(DialogId dialog_id,
DialogId default_join_as_dialog_id) { DialogId default_join_as_dialog_id,
bool force) {
auto d = get_dialog_force(dialog_id); auto d = get_dialog_force(dialog_id);
if (d == nullptr) { if (d == nullptr) {
// nothing to do // nothing to do
return; return;
} }
if (!force && d->active_group_call_id.is_valid() &&
td_->group_call_manager_->is_group_call_being_joined(d->active_group_call_id)) {
LOG(INFO) << "Ignore default_join_as_dialog_id update in a being joined group call";
return;
}
if (default_join_as_dialog_id.is_valid()) { if (default_join_as_dialog_id.is_valid()) {
force_create_dialog(default_join_as_dialog_id, "on_update_dialog_default_join_group_call_as_dialog_id"); force_create_dialog(default_join_as_dialog_id, "on_update_dialog_default_join_group_call_as_dialog_id");
} }
@ -34018,7 +34026,7 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr<Message> &&last_datab
pending_add_default_join_group_call_as_dialog_id_.erase(it); pending_add_default_join_group_call_as_dialog_id_.erase(it);
for (auto &pending_dialog_id : pending_dialog_ids) { for (auto &pending_dialog_id : pending_dialog_ids) {
on_update_dialog_default_join_group_call_as_dialog_id(pending_dialog_id, dialog_id); on_update_dialog_default_join_group_call_as_dialog_id(pending_dialog_id, dialog_id, false);
} }
} }
} }
@ -34124,7 +34132,7 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr<Message> &&last_datab
<< dialog_id; << dialog_id;
pending_add_default_join_group_call_as_dialog_id_[default_join_group_call_as_dialog_id].push_back(dialog_id); pending_add_default_join_group_call_as_dialog_id_[default_join_group_call_as_dialog_id].push_back(dialog_id);
} else { } else {
on_update_dialog_default_join_group_call_as_dialog_id(dialog_id, default_join_group_call_as_dialog_id); on_update_dialog_default_join_group_call_as_dialog_id(dialog_id, default_join_group_call_as_dialog_id, false);
} }
} }

View File

@ -290,7 +290,8 @@ class MessagesManager : public Actor {
void on_update_dialog_group_call_id(DialogId dialog_id, InputGroupCallId input_group_call_id); void on_update_dialog_group_call_id(DialogId dialog_id, InputGroupCallId input_group_call_id);
void on_update_dialog_default_join_group_call_as_dialog_id(DialogId dialog_id, DialogId default_join_as_dialog_id); void on_update_dialog_default_join_group_call_as_dialog_id(DialogId dialog_id, DialogId default_join_as_dialog_id,
bool force);
void on_update_dialog_message_ttl_setting(DialogId dialog_id, MessageTtlSetting message_ttl_setting); void on_update_dialog_message_ttl_setting(DialogId dialog_id, MessageTtlSetting message_ttl_setting);