Fix extra race

This commit is contained in:
Conrad Irwin 2023-10-24 18:54:55 +02:00
parent b8936e5fca
commit dfc34e582a
2 changed files with 20 additions and 12 deletions

View File

@ -60,6 +60,12 @@ impl OneAtATime {
}
})
}
fn running(&self) -> bool {
self.cancel
.as_ref()
.is_some_and(|cancel| !cancel.is_canceled())
}
}
/// Singleton global maintaining the user's participation in a room across workspaces.
@ -170,6 +176,10 @@ impl ActiveCall {
}
cx.notify();
if self._join_debouncer.running() {
return Task::ready(Ok(()));
}
let room = if let Some(room) = self.room().cloned() {
Some(Task::ready(Ok(room)).shared())
} else {
@ -286,6 +296,10 @@ impl ActiveCall {
return Task::ready(Err(anyhow!("no incoming call")));
};
if self.pending_room_creation.is_some() {
return Task::ready(Ok(()));
}
let room_id = call.room_id.clone();
let client = self.client.clone();
let user_store = self.user_store.clone();
@ -331,6 +345,10 @@ impl ActiveCall {
}
}
if self.pending_room_creation.is_some() {
return Task::ready(Ok(None));
}
let client = self.client.clone();
let user_store = self.user_store.clone();
let join = self._join_debouncer.spawn(cx, move |cx| async move {

View File

@ -540,7 +540,7 @@ async fn test_joining_channels_and_calling_multiple_users_simultaneously(
b_invite.await.unwrap();
c_invite.await.unwrap();
assert!(join_channel.await.is_err());
join_channel.await.unwrap();
let room_a = active_call_a.read_with(cx_a, |call, _| call.room().unwrap().clone());
deterministic.run_until_parked();
@ -578,18 +578,8 @@ async fn test_joining_channels_and_calling_multiple_users_simultaneously(
b_invite.await.unwrap();
c_invite.await.unwrap();
let room_a = active_call_a.read_with(cx_a, |call, _| call.room().unwrap().clone());
active_call_a.read_with(cx_a, |call, _| call.room().unwrap().clone());
deterministic.run_until_parked();
assert_eq!(
room_participants(&room_a, cx_a),
RoomParticipants {
remote: Default::default(),
pending: vec!["user_b".to_string(), "user_c".to_string()]
}
);
assert_eq!(channel_id(&room_a, cx_a), Some(channel_1));
}
#[gpui::test(iterations = 10)]