diff options
| author | Jake Heinz <jh@discordapp.com> | 2022-01-14 10:10:47 +0000 |
|---|---|---|
| committer | Jake Heinz <jh@discordapp.com> | 2022-01-14 10:10:47 +0000 |
| commit | 6c5504a61751cbcb71d779dfe2085557e72b6030 (patch) | |
| tree | 44c78989950000b47f0a7b57b1b9b3f591ab5713 | |
| parent | c3f30ae4f004e6e3cc52e30370034e79efaad3d5 (diff) | |
| download | rust-6c5504a61751cbcb71d779dfe2085557e72b6030.tar.gz rust-6c5504a61751cbcb71d779dfe2085557e72b6030.zip | |
one last bit of cleanup
| -rw-r--r-- | crates/ide/src/prime_caches.rs | 39 |
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; |
