diff --git a/Cabal/Distribution/Simple/Test/LibV09.hs b/Cabal/Distribution/Simple/Test/LibV09.hs
index 482953822d3a5765ff205c8a63d17a5e5ed5fd74..859e6a9958c70d0fc4cd5f2c1e942475943aec1e 100644
--- a/Cabal/Distribution/Simple/Test/LibV09.hs
+++ b/Cabal/Distribution/Simple/Test/LibV09.hs
@@ -29,8 +29,9 @@ import Distribution.TestSuite
 import Distribution.Text
 import Distribution.Verbosity ( normal )
 
+import Control.Concurrent (forkIO)
 import Control.Exception ( bracket )
-import Control.Monad ( when, unless )
+import Control.Monad ( when, unless, void )
 import Data.Maybe ( mapMaybe )
 import System.Directory
     ( createDirectoryIfMissing, doesDirectoryExist, doesFileExist
@@ -81,6 +82,12 @@ runTest pkg_descr lbi flags suite = do
         hPutStr wIn $ show (tempLog, PD.testName suite)
         hClose wIn
 
+        -- Append contents of temporary log file to the final human-
+        -- readable log file
+        logText <- hGetContents rOut
+        -- Force the IO manager to drain the test output pipe
+        void $ forkIO $ length logText `seq` return ()
+
         -- Run test executable
         _ <- do let opts = map (testOption pkg_descr lbi suite) $ testOptions flags
                     dataDirPath = pwd </> PD.dataDir pkg_descr
@@ -118,9 +125,6 @@ runTest pkg_descr lbi flags suite = do
         -- Write summary notice to log file indicating start of test suite
         appendFile (logFile suiteLog) $ summarizeSuiteStart $ PD.testName suite
 
-        -- Append contents of temporary log file to the final human-
-        -- readable log file
-        logText <- hGetContents rOut
         appendFile (logFile suiteLog) logText
 
         -- Write end-of-suite summary notice to log file
diff --git a/Cabal/tests/PackageTests.hs b/Cabal/tests/PackageTests.hs
index 458c2a0aa170147f946c5256d5fb5873640f4e43..e065f0f9d7cf54f2aee1253e6caa47bc7c794f75 100644
--- a/Cabal/tests/PackageTests.hs
+++ b/Cabal/tests/PackageTests.hs
@@ -79,12 +79,12 @@ tests config version =
       -- only for higher versions.
     , testGroup "TestSuiteTests"
       [ testGroup "ExeV10"
-        (PackageTests.TestSuiteTests.ExeV10.Check.checks ghcPath)
+        (PackageTests.TestSuiteTests.ExeV10.Check.checks config)
       , testGroup "LibV09"
-        (PackageTests.TestSuiteTests.LibV09.Check.checks inplaceSpec ghcPath)
+        (PackageTests.TestSuiteTests.LibV09.Check.checks config)
       ]
-    , testCase "TestOptions" (PackageTests.TestOptions.Check.suite ghcPath)
-    , testCase "BenchmarkStanza" (PackageTests.BenchmarkStanza.Check.suite ghcPath)
+    , testCase "TestOptions" (PackageTests.TestOptions.Check.suite config)
+    , testCase "BenchmarkStanza" (PackageTests.BenchmarkStanza.Check.suite config)
       -- ^ The benchmark stanza test will eventually be required
       -- only for higher versions.
     , testCase "BenchmarkExeV10/Test"
@@ -101,8 +101,8 @@ tests config version =
     , testCase "DeterministicAr"
       (PackageTests.DeterministicAr.Check.suite config)
     , testCase "EmptyLib/emptyLib"
-      (PackageTests.EmptyLib.Check.emptyLib ghcPath)
-    , testCase "Haddock" (PackageTests.Haddock.Check.suite ghcPath)
+      (PackageTests.EmptyLib.Check.emptyLib config)
+    , testCase "Haddock" (PackageTests.Haddock.Check.suite config)
     , testCase "OrderFlags"
       (PackageTests.OrderFlags.Check.suite config)
     , testCase "TemplateHaskell/dynamic"
diff --git a/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs b/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs
index 758ce679d4994224f123552828a0fc753ec1ee9e..299e29ccb934338d0f9475a0cbae081bfee0a6a9 100644
--- a/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs
+++ b/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs
@@ -24,13 +24,13 @@ import Distribution.Version (Version(..), orLaterVersion)
 
 import PackageTests.PackageTester
 
-checks :: FilePath -> [TestTree]
-checks ghcPath =
-    [ testCase "Test" $ checkTest ghcPath
-    , testGroup "WithHpc" $ hpcTestMatrix ghcPath
+checks :: SuiteConfig -> [TestTree]
+checks config =
+    [ testCase "Test" $ checkTest config
+    , testGroup "WithHpc" $ hpcTestMatrix config
     , testGroup "WithoutHpc"
-      [ testCase "NoTix" $ checkTestNoHpcNoTix ghcPath
-      , testCase "NoMarkup" $ checkTestNoHpcNoMarkup ghcPath
+      [ testCase "NoTix" $ checkTestNoHpcNoTix config
+      , testCase "NoMarkup" $ checkTestNoHpcNoMarkup config
       ]
     ]
 
@@ -59,7 +59,7 @@ hpcTestMatrix config = do
             enable cond flag
               | cond = Just $ "--enable-" ++ flag
               | otherwise = Nothing
-    return $ testCase name $ checkTestWithHpc ghcPath ("WithHpc-" ++ name) opts
+    return $ testCase name $ checkTestWithHpc config ("WithHpc-" ++ name) opts
 
 dir :: FilePath
 dir = "PackageTests" </> "TestSuiteTests" </> "ExeV10"
diff --git a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs
index 1526a72182b887c350956cd81081873e23d915a6..ba9920dab02a754900ee891a5edd4e9b4939232b 100644
--- a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs
+++ b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs
@@ -9,31 +9,33 @@ import PackageTests.PackageTester
 dir :: FilePath
 dir = "PackageTests" </> "TestSuiteTests" </> "LibV09"
 
-checks :: PackageSpec -> FilePath -> [TestTree]
-checks inplaceSpec ghcPath =
-  [ testCase "Build" $ checkBuild inplaceSpec ghcPath
-  , localOption (mkTimeout $ 10 * 10 ^ (6 :: Int))
-    $ testCase "Deadlock" $ checkDeadlock inplaceSpec ghcPath
+checks :: SuiteConfig -> [TestTree]
+checks config =
+  [ testCase "Build" (checkBuild config)
+  , localOption (mkTimeout $ 10 ^ (8 :: Int))
+    $ testCase "Deadlock" (checkDeadlock config)
   ]
 
-checkBuild :: PackageSpec -> FilePath -> Assertion
-checkBuild inplaceSpec ghcPath = do
-  let spec = inplaceSpec
+checkBuild :: SuiteConfig -> Assertion
+checkBuild config = do
+  let spec = (inplaceSpec config)
              { directory = dir
              , distPref = Just $ "dist-Build"
-             , configOpts = "--enable-tests" : configOpts inplaceSpec
+             , configOpts = "--enable-tests"
+                            : configOpts (inplaceSpec config)
              }
-  buildResult <- cabal_build spec ghcPath
+  buildResult <- cabal_build config spec
   assertBuildSucceeded buildResult
 
-checkDeadlock :: PackageSpec -> FilePath -> Assertion
-checkDeadlock inplaceSpec ghcPath = do
-  let spec = inplaceSpec
+checkDeadlock :: SuiteConfig -> Assertion
+checkDeadlock config = do
+  let spec = (inplaceSpec config)
              { directory = dir
              , distPref = Just $ "dist-Test"
-             , configOpts = "--enable-tests" : configOpts inplaceSpec
+             , configOpts = "--enable-tests"
+                            : configOpts (inplaceSpec config)
              }
-  buildResult <- cabal_build spec ghcPath
+  buildResult <- cabal_build config spec
   assertBuildSucceeded buildResult
-  testResult <- cabal_test spec [] [] ghcPath
+  testResult <- cabal_test config spec [] []
   assertTestFailed testResult
diff --git a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs
index c20804bd555dec84c24a7b62948907d59c89c748..5d7db101ed974961825a9e91c53f38fce45cc9cf 100644
--- a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs
+++ b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs
@@ -5,4 +5,4 @@ import Distribution.TestSuite
 import Lib
 
 tests :: IO [Test]
-tests = return  [nullt x | x <- [1 .. 10000]]
+tests = return  [nullt x | x <- [1 .. 1000]]