Fix extra race
This commit is contained in:
parent
b8936e5fca
commit
dfc34e582a
2 changed files with 20 additions and 12 deletions
|
@ -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.
|
/// Singleton global maintaining the user's participation in a room across workspaces.
|
||||||
|
@ -170,6 +176,10 @@ impl ActiveCall {
|
||||||
}
|
}
|
||||||
cx.notify();
|
cx.notify();
|
||||||
|
|
||||||
|
if self._join_debouncer.running() {
|
||||||
|
return Task::ready(Ok(()));
|
||||||
|
}
|
||||||
|
|
||||||
let room = if let Some(room) = self.room().cloned() {
|
let room = if let Some(room) = self.room().cloned() {
|
||||||
Some(Task::ready(Ok(room)).shared())
|
Some(Task::ready(Ok(room)).shared())
|
||||||
} else {
|
} else {
|
||||||
|
@ -286,6 +296,10 @@ impl ActiveCall {
|
||||||
return Task::ready(Err(anyhow!("no incoming call")));
|
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 room_id = call.room_id.clone();
|
||||||
let client = self.client.clone();
|
let client = self.client.clone();
|
||||||
let user_store = self.user_store.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 client = self.client.clone();
|
||||||
let user_store = self.user_store.clone();
|
let user_store = self.user_store.clone();
|
||||||
let join = self._join_debouncer.spawn(cx, move |cx| async move {
|
let join = self._join_debouncer.spawn(cx, move |cx| async move {
|
||||||
|
|
|
@ -540,7 +540,7 @@ async fn test_joining_channels_and_calling_multiple_users_simultaneously(
|
||||||
|
|
||||||
b_invite.await.unwrap();
|
b_invite.await.unwrap();
|
||||||
c_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());
|
let room_a = active_call_a.read_with(cx_a, |call, _| call.room().unwrap().clone());
|
||||||
deterministic.run_until_parked();
|
deterministic.run_until_parked();
|
||||||
|
@ -578,18 +578,8 @@ async fn test_joining_channels_and_calling_multiple_users_simultaneously(
|
||||||
b_invite.await.unwrap();
|
b_invite.await.unwrap();
|
||||||
c_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();
|
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)]
|
#[gpui::test(iterations = 10)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue