diff --git a/ChangeLog.md b/ChangeLog.md index 519f53d469..06d4bb6a4e 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -29,6 +29,9 @@ Bug fixes: * Removes dependency on gnu-tar for OSX and Linux environment. The `--force-local` option was required only for windows environment. +* Properly wait for the `tar` subprocess to complete before returning, thereby + avoiding a SIGTERM screwing up GHC installation. See + [#4888](https://github.com/commercialhaskell/stack/issues/4888). ## v2.1.1.1 diff --git a/src/Stack/Prelude.hs b/src/Stack/Prelude.hs index a64664dc0a..d1aa580739 100644 --- a/src/Stack/Prelude.hs +++ b/src/Stack/Prelude.hs @@ -40,7 +40,7 @@ import System.IO.Echo (withoutInputEcho) import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.List as CL import Data.Conduit.Process.Typed (withLoggedProcess_, createSource, byteStringInput) -import RIO.Process (HasProcessContext (..), ProcessContext, setStdin, closed, getStderr, getStdout, proc, withProcess_, setStdout, setStderr, ProcessConfig, readProcess_, workingDirL) +import RIO.Process (HasProcessContext (..), ProcessContext, setStdin, closed, getStderr, getStdout, proc, withProcess_, setStdout, setStderr, ProcessConfig, readProcess_, workingDirL, waitExitCode) import Data.Text.Encoding (decodeUtf8With) import Data.Text.Encoding.Error (lenientDecode) @@ -80,8 +80,8 @@ sinkProcessStderrStdout name args sinkStderr sinkStdout = $ setStdin (byteStringInput "") pc0 withProcess_ pc $ \p -> - runConduit (getStderr p .| sinkStderr) `concurrently` - runConduit (getStdout p .| sinkStdout) + (runConduit (getStderr p .| sinkStderr) `concurrently` + runConduit (getStdout p .| sinkStdout)) <* waitExitCode p -- | Consume the stdout of a process feeding strict 'ByteString's to a consumer. -- If the process fails, spits out stdout and stderr as error log