Fix race condition when UpdateChannel message is received while fetching participants for previous update
Co-authored-by: Mikayla <mikayla@zed.dev>
This commit is contained in:
@@ -1156,7 +1156,6 @@ async fn rejoin_room(
|
||||
channel_members = mem::take(&mut rejoined_room.channel_members);
|
||||
}
|
||||
|
||||
//TODO: move this into the room guard
|
||||
if let Some(channel_id) = channel_id {
|
||||
channel_updated(
|
||||
channel_id,
|
||||
@@ -2453,9 +2452,6 @@ async fn join_channel(
|
||||
joined_room.clone()
|
||||
};
|
||||
|
||||
// TODO - do this while still holding the room guard,
|
||||
// currently there's a possible race condition if someone joins the channel
|
||||
// after we've dropped the lock but before we finish sending these updates
|
||||
channel_updated(
|
||||
channel_id,
|
||||
&joined_room.room,
|
||||
@@ -2748,7 +2744,6 @@ async fn leave_room_for_session(session: &Session) -> Result<()> {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// TODO - do this while holding the room guard.
|
||||
if let Some(channel_id) = channel_id {
|
||||
channel_updated(
|
||||
channel_id,
|
||||
|
||||
@@ -290,6 +290,7 @@ async fn test_core_channels(
|
||||
);
|
||||
}
|
||||
|
||||
#[track_caller]
|
||||
fn assert_participants_eq(participants: &[Arc<User>], expected_partitipants: &[u64]) {
|
||||
assert_eq!(
|
||||
participants.iter().map(|p| p.id).collect::<Vec<_>>(),
|
||||
@@ -297,6 +298,7 @@ fn assert_participants_eq(participants: &[Arc<User>], expected_partitipants: &[u
|
||||
);
|
||||
}
|
||||
|
||||
#[track_caller]
|
||||
fn assert_members_eq(
|
||||
members: &[ChannelMembership],
|
||||
expected_members: &[(u64, bool, proto::channel_member::Kind)],
|
||||
|
||||
Reference in New Issue
Block a user