This commit is contained in:
Aleksey Kladov 2020-06-28 22:35:18 +02:00
parent 309b21f378
commit eddb744d90
2 changed files with 11 additions and 12 deletions

View file

@ -50,7 +50,7 @@ impl fmt::Display for FlycheckConfig {
#[derive(Debug)]
pub struct FlycheckHandle {
// XXX: drop order is significant
cmd_send: Sender<Restart>,
sender: Sender<Restart>,
thread: jod_thread::JoinHandle,
}
@ -60,16 +60,15 @@ impl FlycheckHandle {
config: FlycheckConfig,
workspace_root: PathBuf,
) -> FlycheckHandle {
let (cmd_send, cmd_recv) = unbounded::<Restart>();
let thread = jod_thread::spawn(move || {
FlycheckActor::new(sender, config, workspace_root).run(cmd_recv);
});
FlycheckHandle { cmd_send, thread }
let actor = FlycheckActor::new(sender, config, workspace_root);
let (sender, receiver) = unbounded::<Restart>();
let thread = jod_thread::spawn(move || actor.run(receiver));
FlycheckHandle { sender, thread }
}
/// Schedule a re-start of the cargo check worker.
pub fn update(&self) {
self.cmd_send.send(Restart).unwrap();
self.sender.send(Restart).unwrap();
}
}
@ -125,7 +124,7 @@ impl FlycheckActor {
recv(check_chan.unwrap_or(&never())) -> msg => Some(Event::CheckEvent(msg.ok())),
}
}
fn run(&mut self, inbox: Receiver<Restart>) {
fn run(mut self, inbox: Receiver<Restart>) {
while let Some(event) = self.next_event(&inbox) {
match event {
Event::Restart(Restart) => {

View file

@ -10,7 +10,7 @@ mod include;
use std::convert::{TryFrom, TryInto};
use crossbeam_channel::{select, unbounded, Receiver};
use crossbeam_channel::{select, unbounded, Receiver, Sender};
use notify::{RecommendedWatcher, RecursiveMode, Watcher};
use paths::{AbsPath, AbsPathBuf};
use rustc_hash::FxHashSet;
@ -22,8 +22,8 @@ use crate::include::Include;
#[derive(Debug)]
pub struct NotifyHandle {
// Relative order of fields below is significant.
sender: crossbeam_channel::Sender<Message>,
_thread: jod_thread::JoinHandle,
sender: Sender<Message>,
thread: jod_thread::JoinHandle,
}
#[derive(Debug)]
@ -37,7 +37,7 @@ impl loader::Handle for NotifyHandle {
let actor = NotifyActor::new(sender);
let (sender, receiver) = unbounded::<Message>();
let thread = jod_thread::spawn(move || actor.run(receiver));
NotifyHandle { sender, _thread: thread }
NotifyHandle { sender, thread }
}
fn set_config(&mut self, config: loader::Config) {
self.sender.send(Message::Config(config)).unwrap()