This commit is contained in:
Lukas Wirth 2022-06-15 18:35:48 +02:00
parent 6438ef9aa3
commit bc1aa93e7e
2 changed files with 18 additions and 15 deletions

View file

@ -157,22 +157,25 @@ impl FlycheckActor {
while let Some(event) = self.next_event(&inbox) { while let Some(event) = self.next_event(&inbox) {
match event { match event {
Event::Restart(Restart) => { Event::Restart(Restart) => {
// Drop and cancel the previously spawned process if let Some(cargo_handle) = self.cargo_handle.take() {
self.cargo_handle.take(); // Cancel the previously spawned process
cargo_handle.cancel();
}
while let Ok(Restart) = inbox.recv_timeout(Duration::from_millis(50)) {} while let Ok(Restart) = inbox.recv_timeout(Duration::from_millis(50)) {}
self.cancel_check_process(); self.cancel_check_process();
let command = self.check_command(); let command = self.check_command();
let command_f = format!("restart flycheck {command:?}"); let command_f = format!("{command:?}");
tracing::debug!(?command, "will restart flycheck");
match CargoHandle::spawn(command) { match CargoHandle::spawn(command) {
Ok(cargo_handle) => { Ok(cargo_handle) => {
tracing::info!("{}", command_f); tracing::debug!(%command_f, "did restart flycheck");
self.cargo_handle = Some(cargo_handle); self.cargo_handle = Some(cargo_handle);
self.progress(Progress::DidStart); self.progress(Progress::DidStart);
} }
Err(e) => { Err(error) => {
tracing::error!("{command_f} failed: {e:?}",); tracing::error!(%command_f, %error, "failed to restart flycheck");
} }
} }
} }
@ -289,7 +292,13 @@ impl CargoHandle {
Ok(CargoHandle { child, thread, receiver }) Ok(CargoHandle { child, thread, receiver })
} }
fn join(self) -> io::Result<()> { fn cancel(mut self) {
let _ = self.child.kill();
let _ = self.child.wait();
}
fn join(mut self) -> io::Result<()> {
let _ = self.child.kill();
let exit_status = self.child.wait()?; let exit_status = self.child.wait()?;
let (read_at_least_one_message, error) = self.thread.join()?; let (read_at_least_one_message, error) = self.thread.join()?;
if read_at_least_one_message || exit_status.success() { if read_at_least_one_message || exit_status.success() {

View file

@ -1,7 +1,7 @@
//! Missing batteries for standard libraries. //! Missing batteries for standard libraries.
use std::iter;
use std::process::Command; use std::process::Command;
use std::{cmp::Ordering, ops, time::Instant}; use std::{cmp::Ordering, ops, time::Instant};
use std::{io as sio, iter};
mod macros; mod macros;
pub mod process; pub mod process;
@ -159,16 +159,10 @@ impl Drop for JodChild {
} }
impl JodChild { impl JodChild {
pub fn spawn(mut command: Command) -> std::io::Result<Self> { pub fn spawn(mut command: Command) -> sio::Result<Self> {
command.spawn().map(Self) command.spawn().map(Self)
} }
pub fn wait(self) -> std::io::Result<std::process::ExitStatus> {
let mut inner = self.into_inner();
let _ = inner.kill();
inner.wait()
}
pub fn into_inner(self) -> std::process::Child { pub fn into_inner(self) -> std::process::Child {
if cfg!(target_arch = "wasm32") { if cfg!(target_arch = "wasm32") {
panic!("no processes on wasm"); panic!("no processes on wasm");