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
send_closure_later(G()->messages_manager(),
&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;
@ -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
send_closure_later(G()->messages_manager(),
&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) {

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());
}
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 {
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,
DialogId default_join_as_dialog_id) {
DialogId default_join_as_dialog_id,
bool force) {
auto d = get_dialog_force(dialog_id);
if (d == nullptr) {
// nothing to do
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()) {
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);
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;
pending_add_default_join_group_call_as_dialog_id_[default_join_group_call_as_dialog_id].push_back(dialog_id);
} 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_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);