chiark / gitweb /
client: better logging of ipif failures
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Aug 2021 12:50:36 +0000 (13:50 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Aug 2021 12:50:36 +0000 (13:50 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/client.rs

index 75e868d60c14914ef6b4500f4bd37d4faa1af774..8d29beaed621aca273fa3213f264d61c1a293000 100644 (file)
@@ -189,7 +189,7 @@ async fn run_client<C:HCC>(
   
   let stderr = ipif.stderr.take().unwrap();
   let ic_name = ic.to_string();
-  let _ = task::spawn(async move {
+  let stderr_task = task::spawn(async move {
     let mut stderr = tokio::io::BufReader::new(stderr).lines();
     while let Some(l) = stderr.next_line().await? {
       error!("{}: ipif stderr: {}", &ic_name, l.trim_end());
@@ -316,8 +316,19 @@ async fn run_client<C:HCC>(
 
   match ipif.wait().await {
     Err(e) => error!("{}: also, failed to await ipif child: {}", &ic, e),
-    Ok(st) if st.success() => { },
-    Ok(st) => error!("{}: ipif process failed: {}", &ic, st),
+    Ok(st) => {
+      let stderr_timeout = Duration::from_millis(100);
+      match tokio::time::timeout(stderr_timeout, stderr_task).await {
+        Err::<_,tokio::time::error::Elapsed>(_)
+          => warn!("{}: ipif stderr task continues!", &ic),
+        Ok(Err(e)) => error!("{}: ipif stderr task crashed: {}", &ic, e),
+        Ok(Ok(Err(e))) => error!("{}: ipif stderr read failed: {}", &ic, e),
+        Ok(Ok(Ok(()))) => { },
+      }
+      if ! st.success() {
+        error!("{}: ipif process failed: {}", &ic, st);
+      }
+    }
   }
 
   trouble