mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-08-18 16:29:40 +00:00
fix: handle child process exiting with error correctly
This commit is contained in:
parent
a4d6ef75fa
commit
245105ba6a
2 changed files with 13 additions and 1 deletions
|
@ -182,6 +182,9 @@ impl SimpleComponent for BuildWindow {
|
||||||
BuildStatus::Error(_) => label.add_css_class("error"),
|
BuildStatus::Error(_) => label.add_css_class("error"),
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
if status != BuildStatus::Building {
|
||||||
|
sender.input(Self::Input::UpdateCanClose(true));
|
||||||
|
}
|
||||||
self.set_build_status(status);
|
self.set_build_status(status);
|
||||||
}
|
}
|
||||||
Self::Input::UpdateCanClose(val) => {
|
Self::Input::UpdateCanClose(val) => {
|
||||||
|
|
|
@ -10,6 +10,7 @@ use std::{
|
||||||
collections::VecDeque,
|
collections::VecDeque,
|
||||||
io::{BufRead, BufReader},
|
io::{BufRead, BufReader},
|
||||||
mem,
|
mem,
|
||||||
|
os::unix::process::ExitStatusExt,
|
||||||
process::{Command, Stdio},
|
process::{Command, Stdio},
|
||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
thread,
|
thread,
|
||||||
|
@ -105,7 +106,15 @@ impl Worker for InternalJobWorker {
|
||||||
let stderr_sender = sender.clone();
|
let stderr_sender = sender.clone();
|
||||||
let stdout_logger = logger_thread!(stdout, stdout_sender);
|
let stdout_logger = logger_thread!(stdout, stdout_sender);
|
||||||
let stderr_logger = logger_thread!(stderr, stderr_sender);
|
let stderr_logger = logger_thread!(stderr, stderr_sender);
|
||||||
cmd.wait().expect("Failed to wait for process");
|
let status = cmd.wait().expect("Failed to wait for process");
|
||||||
|
if !status.success() {
|
||||||
|
self.state.lock().unwrap().exit_status = Some(
|
||||||
|
status
|
||||||
|
.code()
|
||||||
|
.unwrap_or_else(|| status.signal().unwrap_or(-1337)),
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
stdout_logger.join().expect("Failed to join reader thread");
|
stdout_logger.join().expect("Failed to join reader thread");
|
||||||
stderr_logger.join().expect("Failed to join reader thread");
|
stderr_logger.join().expect("Failed to join reader thread");
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue