]> git.lizzy.rs Git - rust.git/commitdiff
appveyor: Attempt to debug flaky test runs
authorAlex Crichton <alex@alexcrichton.com>
Thu, 29 Dec 2016 23:58:57 +0000 (15:58 -0800)
committerAlex Crichton <alex@alexcrichton.com>
Thu, 29 Dec 2016 23:58:57 +0000 (15:58 -0800)
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

appveyor.yml
src/tools/compiletest/src/runtest.rs

index cb3b50cbaeff24734345a44270d19ad343e17831..521ab00d0bfafe925c5bbde612adbf8c9baff16c 100644 (file)
@@ -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=.
index d729deb8605d257a6b9ab70e1d2d2a7f7eef0363..05f9beca3d11aa1948284a08c5cc92384bab55a1 100644 (file)
@@ -1619,10 +1619,48 @@ fn fatal(&self, err: &str) -> ! {
     }
 
     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);