resolve: Scale back unloading of speculatively loaded crates
This commit is contained in:
parent
8b21296b5d
commit
24cffbf703
7 changed files with 26 additions and 18 deletions
|
@ -1070,16 +1070,6 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
|
|||
pub fn maybe_process_path_extern(&mut self, name: Symbol) -> Option<CrateNum> {
|
||||
self.maybe_resolve_crate(name, CrateDepKind::Explicit, None).ok()
|
||||
}
|
||||
|
||||
pub fn unload_unused_crates(&mut self) {
|
||||
for opt_cdata in &mut self.cstore.metas {
|
||||
if let Some(cdata) = opt_cdata
|
||||
&& !cdata.used()
|
||||
{
|
||||
*opt_cdata = None;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn global_allocator_spans(krate: &ast::Crate) -> Vec<Span> {
|
||||
|
|
|
@ -519,6 +519,16 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) {
|
|||
tcx.untracked().cstore.freeze();
|
||||
tcx.arena.alloc_from_iter(CStore::from_tcx(tcx).iter_crate_data().map(|(cnum, _)| cnum))
|
||||
},
|
||||
used_crates: |tcx, ()| {
|
||||
// The list of loaded crates is now frozen in query cache,
|
||||
// so make sure cstore is not mutably accessed from here on.
|
||||
tcx.untracked().cstore.freeze();
|
||||
tcx.arena.alloc_from_iter(
|
||||
CStore::from_tcx(tcx)
|
||||
.iter_crate_data()
|
||||
.filter_map(|(cnum, data)| data.used().then_some(cnum)),
|
||||
)
|
||||
},
|
||||
..providers.queries
|
||||
};
|
||||
provide_extern(&mut providers.extern_queries);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue