Don't get into a restart loop if swaymsg monitor process exited

timeout_old
Tassilo Horn 4 years ago
parent 755d452e01
commit b8c0799ffc
  1. 19
      src/demon.rs

@ -13,7 +13,7 @@ use std::time::{SystemTime, UNIX_EPOCH};
pub fn monitor_con_events( pub fn monitor_con_events(
con_props: Arc<RwLock<HashMap<ipc::Id, ipc::ConProps>>>, con_props: Arc<RwLock<HashMap<ipc::Id, ipc::ConProps>>>,
) { ) {
let child = proc::Command::new("swaymsg") let mut child = proc::Command::new("swaymsg")
.arg("--monitor") .arg("--monitor")
.arg("--raw") .arg("--raw")
.arg("-t") .arg("-t")
@ -22,7 +22,7 @@ pub fn monitor_con_events(
.stdout(proc::Stdio::piped()) .stdout(proc::Stdio::piped())
.spawn() .spawn()
.expect("Failed to subscribe to window events"); .expect("Failed to subscribe to window events");
let stdout: proc::ChildStdout = child.stdout.unwrap(); let stdout = child.stdout.take().unwrap();
let reader = std::io::BufReader::new(stdout); let reader = std::io::BufReader::new(stdout);
let deserializer = Deserializer::from_reader(reader); let deserializer = Deserializer::from_reader(reader);
for res in deserializer.into_iter::<ipc::ConEvent>() { for res in deserializer.into_iter::<ipc::ConEvent>() {
@ -31,8 +31,19 @@ pub fn monitor_con_events(
Err(err) => eprintln!("Error handling window event:\n{:?}", err), Err(err) => eprintln!("Error handling window event:\n{:?}", err),
} }
} }
eprintln!("Stopped monitoring con events. Restarting...");
monitor_con_events(con_props); match child.try_wait() {
Ok(exit_code) => match exit_code {
None => {
eprintln!("Stopped monitoring con events. Restarting...");
monitor_con_events(con_props)
}
Some(exit_code) => {
println!("Swaymsg exited with code {}. Exiting.", exit_code)
}
},
Err(err) => println!("Swaymsg errored with {}. Exiting.", err),
}
} }
fn update_last_focus_time( fn update_last_focus_time(

Loading…
Cancel
Save