about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-12-29 15:58:57 -0800
committerAlex Crichton <alex@alexcrichton.com>2016-12-29 15:58:57 -0800
commite5c778228e2e825002bc4eb1e62cfc35afce0dd4 (patch)
treec269105775bd128b127055cd8a60cb39c5d1c6e9
parent3f957ebeff8932637002574c9eae75a702b202b7 (diff)
downloadrust-e5c778228e2e825002bc4eb1e62cfc35afce0dd4.tar.gz
rust-e5c778228e2e825002bc4eb1e62cfc35afce0dd4.zip
appveyor: Attempt to debug flaky test runs
This commit is an attempt to debug #38620 since we're unable to reproduce it
locally. It follows the [advice] of those with AppVeyor to use the `handle.exe`
tool to try to debug what processes have a handle to the file open.

This won't be guaranteed to actually help us, but hopefully it'll diagnose
something at some point?

[advice]: http://help.appveyor.com/discussions/questions/2898
-rw-r--r--appveyor.yml7
-rw-r--r--src/tools/compiletest/src/runtest.rs38
2 files changed, 45 insertions, 0 deletions
diff --git a/appveyor.yml b/appveyor.yml
index cb3b50cbaef..521ab00d0bf 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -96,6 +96,13 @@ install:
   - 7z x -y sccache.tar > nul
   - set PATH=%PATH%;%CD%\sccache2
 
+  # Help debug some handle issues on AppVeyor
+  - ps: Invoke-WebRequest -Uri https://download.sysinternals.com/files/Handle.zip -OutFile handle.zip
+  - mkdir handle
+  - ps: Expand-Archive handle.zip -dest handle
+  - set PATH=%PATH%;%CD%\handle
+  - handle.exe -accepteula -help
+
 test_script:
   - git submodule update --init
   - set SRC=.
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index d729deb8605..05f9beca3d1 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -1619,10 +1619,48 @@ actual:\n\
     }
 
     fn fatal_proc_rec(&self, err: &str, proc_res: &ProcRes) -> ! {
+        self.try_print_open_handles();
         self.error(err);
         proc_res.fatal(None);
     }
 
+    // This function is a poor man's attempt to debug rust-lang/rust#38620, if
+    // that's closed then this should be deleted
+    //
+    // This is a very "opportunistic" debugging attempt, so we ignore all
+    // errors here.
+    fn try_print_open_handles(&self) {
+        if !cfg!(windows) {
+            return
+        }
+        if self.config.mode != Incremental {
+            return
+        }
+
+        let filename = match self.testpaths.file.file_stem() {
+            Some(path) => path,
+            None => return,
+        };
+
+        let mut cmd = Command::new("handle.exe");
+        cmd.arg("-a").arg("-u");
+        cmd.arg(filename);
+        cmd.arg("-nobanner");
+        let output = match cmd.output() {
+            Ok(output) => output,
+            Err(_) => return,
+        };
+        println!("---------------------------------------------------");
+        println!("ran extra command to debug rust-lang/rust#38620: ");
+        println!("{:?}", cmd);
+        println!("result: {}", output.status);
+        println!("--- stdout ----------------------------------------");
+        println!("{}", String::from_utf8_lossy(&output.stdout));
+        println!("--- stderr ----------------------------------------");
+        println!("{}", String::from_utf8_lossy(&output.stderr));
+        println!("---------------------------------------------------");
+    }
+
     fn _arm_exec_compiled_test(&self, env: Vec<(String, String)>) -> ProcRes {
         let args = self.make_run_args();
         let cmdline = self.make_cmdline("", &args.prog, &args.args);