
#15363: Do some cleaning up of the testsuite driver -------------------------------------+------------------------------------- Reporter: lantti | Owner: lantti Type: task | Status: patch Priority: low | Milestone: 8.8.1 Component: Test Suite | Version: 8.4.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by lantti): * status: new => patch Comment: I was playing around some more with the Windows process groups but eventually went the Job Objects way. The Windows console process groups are supported by subprocess module and os module, resulting in an almost total elimination of the diverging code path and working to my satisfaction on a light load, but unfortunately not working under mintty without additional winpty wrapping and still breaking apart on heavier loads due to Windows Console signals not being guaranteed to be delivered in such cases. The Job Objects on the other hand require a long diverging code path, but were absolutely robust against my limited stress tests. A preliminary patch is submitted to Phabricator: https://phabricator.haskell.org/D5107 Some simple tests that I used to evaluate that: https://github.com/lantti/ghc/tree/testsuite-tests/testsuite/tests/aaa The patch follows the approach from timeout.hs for Windows and uses subprocess module for Posix. As the Windows code path doesn't use subprocess anymore the IO redirection and environment string generation are handled by this patch too. All in all the diverging code paths didn't get shorter, unlike I had hoped. According to my few test runs the testsuite runs slightly faster on Posix now, on Windows I don't have any coherent results of it running faster or slower. Also interrupting the test run on Windows is as sketchy as it used to be, it only works because mintty kills our process tree for us. No signals get delivered to our testsuite driver and none of our cleanup or results collecting code runs. Some related observations I made while working on this: - in addition to the signals/console incompatibility between mintty-mingw and native Windows programs, current versions of mintty-mingw have problems handling unicode environment variables, the variables get mangled already before they are passed to the python interpreter. - our Posix code (before and after the patch) leave child process management to the test process in cases of normal termination and keyboard interrupt, meaning that if the test program itself does not signal and wait for its children to terminate then nobody will. The only case where the testsuite driver takes action and signals the process group is after a timeout. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15363#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler