diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2023-03-23 20:44:48 +0400 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2023-03-23 20:44:48 +0400 |
| commit | 1cec923fbb9f5a71ff9664e9c8eba9d40ed02319 (patch) | |
| tree | bdf1be9d99b89fd67ad8b06ccddacf2220e80fc6 /compiler | |
| parent | 71927ad083f2cca93b8de388e2e3bac0cc7bd3f7 (diff) | |
| download | rust-1cec923fbb9f5a71ff9664e9c8eba9d40ed02319.tar.gz rust-1cec923fbb9f5a71ff9664e9c8eba9d40ed02319.zip | |
rustc_metadata: Freeze cstore after the full crate list is queried
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs index 0d54f292636..3a50d7c9363 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs @@ -490,6 +490,9 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) { .alloc_slice(&CStore::from_tcx(tcx).crate_dependencies_in_postorder(LOCAL_CRATE)) }, 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.leak(); tcx.arena.alloc_from_iter(CStore::from_tcx(tcx).iter_crate_data().map(|(cnum, _)| cnum)) }, ..*providers |
