Remove race in default_join_as updating.
This commit is contained in:
parent
4eab57cd7b
commit
159c4f3f00
@ -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) {
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user