Cancel requests during shutdown

This commit is contained in:
Aleksey Kladov 2020-01-24 16:35:37 +01:00
parent 8a4c248c48
commit b90ea640e6
3 changed files with 10 additions and 5 deletions

View File

@ -166,13 +166,15 @@ pub fn prepare(
const GC_COOLDOWN: time::Duration = time::Duration::from_millis(100);
impl RootDatabase {
pub(crate) fn request_cancellation(&mut self) {
let _p = profile("RootDatabase::request_cancellation");
self.salsa_runtime_mut().synthetic_write(Durability::LOW);
}
pub(crate) fn apply_change(&mut self, change: AnalysisChange) {
let _p = profile("RootDatabase::apply_change");
self.request_cancellation();
log::info!("apply_change {:?}", change);
{
let _p = profile("RootDatabase::apply_change/cancellation");
self.salsa_runtime_mut().synthetic_write(Durability::LOW);
}
if !change.new_roots.is_empty() {
let mut local_roots = Vec::clone(&self.local_roots());
for (root_id, is_local) in change.new_roots {

View File

@ -202,6 +202,9 @@ pub fn collect_garbage(&mut self) {
pub fn per_query_memory_usage(&mut self) -> Vec<(String, ra_prof::Bytes)> {
self.db.per_query_memory_usage()
}
pub fn request_cancellation(&mut self) {
self.db.request_cancellation();
}
pub fn raw_database(
&self,
) -> &(impl hir::db::HirDatabase + salsa::Database + ra_db::SourceDatabaseExt) {

View File

@ -210,7 +210,7 @@ pub fn main_loop(
)?;
}
}
world_state.analysis_host.request_cancellation();
log::info!("waiting for tasks to finish...");
task_receiver.into_iter().for_each(|task| {
on_task(task, &connection.sender, &mut loop_state.pending_requests, &mut world_state)