1. 28 Dec, 2019 2 commits
  2. 27 Dec, 2019 5 commits
  3. 26 Dec, 2019 5 commits
  4. 24 Dec, 2019 3 commits
  5. 20 Dec, 2019 2 commits
  6. 19 Dec, 2019 2 commits
    • Sylvain Henry's avatar
      Handle large ARR_WORDS in heap census (fix #17572) · 0c114c65
      Sylvain Henry authored
      We can do a heap census with a non-profiling RTS. With a non-profiling
      RTS we don't zero superfluous bytes of shrunk arrays hence a need to
      handle the case specifically to avoid a crash.
      
      Revert part of a586b33f
      0c114c65
    • Moritz Kiefer's avatar
      Avoid race condition in hDuplicateTo · fad866e0
      Moritz Kiefer authored
      In our codebase we have some code along the lines of
      
      ```
      newStdout <- hDuplicate stdout
      stderr `hDuplicateTo` stdout
      ```
      
      to avoid stray `putStrLn`s from corrupting a protocol (LSP) that is
      run over stdout.
      
      On CI we have seen a bunch of issues where `dup2` returned `EBUSY` so
      this fails with `ResourceExhausted` in Haskell.
      
      I’ve spent some time looking at the docs for `dup2` and the code in
      `base` and afaict the following race condition is being triggered
      here:
      
      1. The user calls `hDuplicateTo stderr stdout`.
      2. `hDuplicateTo` calls `hClose_help stdout_`, this closes the file
      handle for stdout.
      3. The file handle for stdout is now free, so another thread
      allocating a file might get stdout.
      4. If `dup2` is called while `stdout` (now pointing to something
      else) is half-open, it returns EBUSY.
      
      I think there might actually be an even worse case where `dup2` is run
      after FD 1 is fully open again. In that case, you will end up not just
      redirecting the original stdout to stderr but also the whatever
      resulted in that file handle being allocated.
      
      As far as I can tell, `dup2` takes care of closing the file handle
      itself so there is no reason to do this in `hDuplicateTo`. So this PR
      replaces the call to `hClose_help` by the only part of `hClose_help`
      that we actually care about, namely, `flushWriteBuffer`.
      
      I tested this on our codebase fairly extensively and haven’t been able
      to reproduce the issue with this patch.
      fad866e0
  7. 18 Dec, 2019 1 commit
    • Sylvain Henry's avatar
      Add GHC-API logging hooks · 58655b9d
      Sylvain Henry authored
      * Add 'dumpAction' hook to DynFlags.
      
      It allows GHC API users to catch dumped intermediate codes and
      information. The format of the dump (Core, Stg, raw text, etc.) is now
      reported allowing easier automatic handling.
      
      * Add 'traceAction' hook to DynFlags.
      
      Some dumps go through the trace mechanism (for instance unfoldings that
      have been considered for inlining). This is problematic because:
      1) dumps aren't written into files even with -ddump-to-file on
      2) dumps are written on stdout even with GHC API
      3) in this specific case, dumping depends on unsafe globally stored
      DynFlags which is bad for GHC API users
      
      We introduce 'traceAction' hook which allows GHC API to catch those
      traces and to avoid using globally stored DynFlags.
      
      * Avoid dumping empty logs via dumpAction/traceAction (but still write
      empty files to keep the existing behavior)
      58655b9d
  8. 17 Dec, 2019 20 commits