diff --git a/turbopack/crates/turbo-tasks-fs/src/lib.rs b/turbopack/crates/turbo-tasks-fs/src/lib.rs index a9e5b530863626..464f8d3867e951 100644 --- a/turbopack/crates/turbo-tasks-fs/src/lib.rs +++ b/turbopack/crates/turbo-tasks-fs/src/lib.rs @@ -266,15 +266,22 @@ impl DiskFileSystemInner { ) -> Result)>> { let mut invalidator_map = self.invalidator_map.lock().unwrap(); let invalidators = invalidator_map.entry(path_to_key(path)).or_default(); - let mut old_invalidators = take(invalidators); - old_invalidators.remove(&invalidator); + let old_invalidators = invalidators + .extract_if(|i, old_write_content| { + i == &invalidator + || old_write_content + .as_ref() + .is_none_or(|old| old != &write_content) + }) + .filter(|(i, _)| i != &invalidator) + .collect::>(); invalidators.insert(invalidator, Some(write_content)); drop(invalidator_map); #[cfg(not(any(target_os = "macos", target_os = "windows")))] if let Some(dir) = path.parent() { self.watcher.ensure_watching(dir, self.root_path())?; } - Ok(old_invalidators.into_iter().collect()) + Ok(old_invalidators) } /// registers the path as an invalidator for the current task,