From 5df0a6a425e17a3667355bcb4f7436ad9b24ee22 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 30 Jun 2022 10:20:46 +0200 Subject: [PATCH] Coalesce as many fs events as possible before processing them --- crates/project/src/worktree.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 3afbcb1dd7..8af81f6d1a 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -45,6 +45,7 @@ use std::{ os::unix::prelude::{OsStrExt, OsStringExt}, path::{Path, PathBuf}, sync::{atomic::AtomicUsize, Arc}, + task::Poll, time::{Duration, SystemTime}, }; use sum_tree::{Bias, Edit, SeekTarget, SumTree, TreeMap}; @@ -2073,7 +2074,12 @@ impl BackgroundScanner { } futures::pin_mut!(events_rx); - while let Some(events) = events_rx.next().await { + + while let Some(mut events) = events_rx.next().await { + while let Poll::Ready(Some(additional_events)) = futures::poll!(events_rx.next()) { + events.extend(additional_events); + } + if self.notify.unbounded_send(ScanState::Scanning).is_err() { break; }