Coalesce as many fs events as possible before processing them

Antonio Scandurra created

Change summary

crates/project/src/worktree.rs | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

Detailed changes

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;
             }