From 372e31d54f5e940d741fba4750f14444dcc636f6 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 10 Apr 2023 08:16:08 +0200 Subject: [PATCH] Don't panic if worktree was dropped before sending path changes In `refresh_entry`, we send a message to the `self.path_changes_tx` channel to notify the background thread that a path has changed. However, given that `refresh_entry` uses `spawn_weak`, the worktree could get dropped before sending the message, which could cause a panic. This commit changes the code to return an error instead of panicking. --- crates/project/src/worktree.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 3a9838c62d..72e05dd1f9 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -838,8 +838,7 @@ impl LocalWorktree { .unwrap() .path_changes_tx .try_send((vec![abs_path], tx)) - .unwrap(); - }); + })?; rx.recv().await; Ok(()) })) @@ -930,7 +929,7 @@ impl LocalWorktree { } let (tx, mut rx) = barrier::channel(); - path_changes_tx.try_send((paths, tx)).unwrap(); + path_changes_tx.try_send((paths, tx))?; rx.recv().await; this.upgrade(&cx) .ok_or_else(|| anyhow!("worktree was dropped"))?