From 836b6dfbaf4c7f938194cba4afc47d80cb5cb50a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 2 Sep 2021 10:15:02 +0200 Subject: [PATCH] Don't return channels that were released in `ChannelList::get_channel` --- zed/src/channel.rs | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/zed/src/channel.rs b/zed/src/channel.rs index 387ea508cb..bf49371109 100644 --- a/zed/src/channel.rs +++ b/zed/src/channel.rs @@ -10,7 +10,7 @@ use gpui::{ }; use postage::prelude::Stream; use std::{ - collections::{hash_map, HashMap, HashSet}, + collections::{HashMap, HashSet}, ops::Range, sync::Arc, }; @@ -139,25 +139,16 @@ impl ChannelList { id: u64, cx: &mut MutableAppContext, ) -> Option> { - match self.channels.entry(id) { - hash_map::Entry::Occupied(entry) => entry.get().upgrade(cx), - hash_map::Entry::Vacant(entry) => { - if let Some(details) = self - .available_channels - .as_ref() - .and_then(|channels| channels.iter().find(|details| details.id == id)) - { - let user_store = self.user_store.clone(); - let rpc = self.rpc.clone(); - let channel = - cx.add_model(|cx| Channel::new(details.clone(), user_store, rpc, cx)); - entry.insert(channel.downgrade()); - Some(channel) - } else { - None - } - } + if let Some(channel) = self.channels.get(&id).and_then(|c| c.upgrade(cx)) { + return Some(channel); } + + let channels = self.available_channels.as_ref()?; + let details = channels.iter().find(|details| details.id == id)?.clone(); + let channel = + cx.add_model(|cx| Channel::new(details, self.user_store.clone(), self.rpc.clone(), cx)); + self.channels.insert(id, channel.downgrade()); + Some(channel) } }