about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJake Heinz <jh@discordapp.com>2022-01-14 10:10:47 +0000
committerJake Heinz <jh@discordapp.com>2022-01-14 10:10:47 +0000
commit6c5504a61751cbcb71d779dfe2085557e72b6030 (patch)
tree44c78989950000b47f0a7b57b1b9b3f591ab5713
parentc3f30ae4f004e6e3cc52e30370034e79efaad3d5 (diff)
downloadrust-6c5504a61751cbcb71d779dfe2085557e72b6030.tar.gz
rust-6c5504a61751cbcb71d779dfe2085557e72b6030.zip
one last bit of cleanup
-rw-r--r--crates/ide/src/prime_caches.rs39
1 files changed, 21 insertions, 18 deletions
diff --git a/crates/ide/src/prime_caches.rs b/crates/ide/src/prime_caches.rs
index 8aef76eae80..5e382860172 100644
--- a/crates/ide/src/prime_caches.rs
+++ b/crates/ide/src/prime_caches.rs
@@ -14,7 +14,7 @@ use ide_db::{
 };
 use rustc_hash::FxHashSet;
 
-use crate::RootDatabase;
+use crate::{prime_caches, RootDatabase};
 
 /// We're indexing many crates.
 #[derive(Debug)]
@@ -54,34 +54,37 @@ pub(crate) fn parallel_prime_caches(
         builder.build()
     };
 
-    let (work_sender, work_receiver) = crossbeam_channel::unbounded();
-    let (progress_sender, progress_receiver) = crossbeam_channel::unbounded();
-
     enum ParallelPrimeCacheWorkerProgress {
         BeginCrate { crate_id: CrateId, crate_name: String },
         EndCrate { crate_id: CrateId },
     }
 
-    let prime_caches_worker = move |db: Snapshot<RootDatabase>| {
-        while let Ok((crate_id, crate_name)) = work_receiver.recv() {
-            progress_sender
-                .send(ParallelPrimeCacheWorkerProgress::BeginCrate { crate_id, crate_name })?;
+    let (work_sender, progress_receiver) = {
+        let (progress_sender, progress_receiver) = crossbeam_channel::unbounded();
+        let (work_sender, work_receiver) = crossbeam_channel::unbounded();
+        let prime_caches_worker = move |db: Snapshot<RootDatabase>| {
+            while let Ok((crate_id, crate_name)) = work_receiver.recv() {
+                progress_sender
+                    .send(ParallelPrimeCacheWorkerProgress::BeginCrate { crate_id, crate_name })?;
+
+                // This also computes the DefMap
+                db.import_map(crate_id);
 
-            // This also computes the DefMap
-            db.import_map(crate_id);
+                progress_sender.send(ParallelPrimeCacheWorkerProgress::EndCrate { crate_id })?;
+            }
 
-            progress_sender.send(ParallelPrimeCacheWorkerProgress::EndCrate { crate_id })?;
+            Ok::<_, crossbeam_channel::SendError<_>>(())
+        };
+
+        for _ in 0..num_worker_threads {
+            let worker = prime_caches_worker.clone();
+            let db = db.snapshot();
+            std::thread::spawn(move || Cancelled::catch(|| worker(db)));
         }
 
-        Ok::<_, crossbeam_channel::SendError<_>>(())
+        (work_sender, progress_receiver)
     };
 
-    for _ in 0..num_worker_threads {
-        let worker = prime_caches_worker.clone();
-        let db = db.snapshot();
-        std::thread::spawn(move || Cancelled::catch(|| worker(db)));
-    }
-
     let crates_total = crates_to_prime.pending();
     let mut crates_done = 0;