2924: Modify ordering of drops in check watcher to only ever have one cargo r=matklad a=kiljacken

Due to the way drops are ordered when assigning to a mutable variable we
were launching a new cargo sub-process before letting the old one quite.

By explicitly replacing the original watcher with a dummy first, we
ensure it is dropped and the process is completed, before we start the
new process.

Co-authored-by: Emil Lauridsen <mine809@gmail.com>
This commit is contained in:
bors[bot]
2020-01-28 13:54:29 +00:00
committed by GitHub
+4 -2
View File
@@ -216,8 +216,10 @@ fn run(&mut self, task_send: &Sender<CheckTask>, cmd_recv: &Receiver<CheckComman
self.last_update_req.take();
task_send.send(CheckTask::ClearDiagnostics).unwrap();
// By replacing the watcher, we drop the previous one which
// causes it to shut down automatically.
// Replace with a dummy watcher first so we drop the original and wait for completion
std::mem::replace(&mut self.watcher, WatchThread::dummy());
// Then create the actual new watcher
self.watcher = WatchThread::new(&self.options, &self.workspace_root);
}
}