Don't wait for host's worktree updates if they disconnected
Co-Authored-By: Max Brunsfeld <max@zed.dev>
This commit is contained in:
parent
48ff443d10
commit
2d8ffbdfa2
2 changed files with 20 additions and 5 deletions
|
@ -1343,6 +1343,15 @@ impl Project {
|
||||||
{
|
{
|
||||||
*sharing_has_stopped = true;
|
*sharing_has_stopped = true;
|
||||||
self.collaborators.clear();
|
self.collaborators.clear();
|
||||||
|
for worktree in &self.worktrees {
|
||||||
|
if let Some(worktree) = worktree.upgrade(cx) {
|
||||||
|
worktree.update(cx, |worktree, _| {
|
||||||
|
if let Some(worktree) = worktree.as_remote_mut() {
|
||||||
|
worktree.disconnected_from_host();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ pub struct RemoteWorktree {
|
||||||
pub(crate) background_snapshot: Arc<Mutex<Snapshot>>,
|
pub(crate) background_snapshot: Arc<Mutex<Snapshot>>,
|
||||||
project_id: u64,
|
project_id: u64,
|
||||||
client: Arc<Client>,
|
client: Arc<Client>,
|
||||||
updates_tx: UnboundedSender<proto::UpdateWorktree>,
|
updates_tx: Option<UnboundedSender<proto::UpdateWorktree>>,
|
||||||
last_scan_id_rx: watch::Receiver<usize>,
|
last_scan_id_rx: watch::Receiver<usize>,
|
||||||
replica_id: ReplicaId,
|
replica_id: ReplicaId,
|
||||||
diagnostic_summaries: TreeMap<PathKey, DiagnosticSummary>,
|
diagnostic_summaries: TreeMap<PathKey, DiagnosticSummary>,
|
||||||
|
@ -202,7 +202,7 @@ impl Worktree {
|
||||||
replica_id,
|
replica_id,
|
||||||
snapshot: snapshot.clone(),
|
snapshot: snapshot.clone(),
|
||||||
background_snapshot: background_snapshot.clone(),
|
background_snapshot: background_snapshot.clone(),
|
||||||
updates_tx,
|
updates_tx: Some(updates_tx),
|
||||||
last_scan_id_rx,
|
last_scan_id_rx,
|
||||||
client: client.clone(),
|
client: client.clone(),
|
||||||
diagnostic_summaries: TreeMap::from_ordered_entries(
|
diagnostic_summaries: TreeMap::from_ordered_entries(
|
||||||
|
@ -1042,13 +1042,19 @@ impl RemoteWorktree {
|
||||||
self.snapshot.clone()
|
self.snapshot.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn disconnected_from_host(&mut self) {
|
||||||
|
self.updates_tx.take();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn update_from_remote(
|
pub fn update_from_remote(
|
||||||
&mut self,
|
&mut self,
|
||||||
envelope: TypedEnvelope<proto::UpdateWorktree>,
|
envelope: TypedEnvelope<proto::UpdateWorktree>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
self.updates_tx
|
if let Some(updates_tx) = &self.updates_tx {
|
||||||
.unbounded_send(envelope.payload)
|
updates_tx
|
||||||
.expect("consumer runs to completion");
|
.unbounded_send(envelope.payload)
|
||||||
|
.expect("consumer runs to completion");
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue