Skip to content
Snippets Groups Projects
  1. Dec 21, 2019
  2. Dec 20, 2019
  3. Dec 19, 2019
    • Sylvain Henry's avatar
      Handle large ARR_WORDS in heap census (fix #17572) · 0c114c65
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      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 and Marge Bot's avatar Marge Bot committed
      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
  4. Dec 18, 2019
    • 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
  5. Dec 17, 2019
  6. Dec 16, 2019
  7. Dec 12, 2019
  8. Dec 11, 2019
    • Richard Eisenberg's avatar
      Warn on inferred polymorphic recursion · 2d1b9619
      Richard Eisenberg authored and Marge Bot's avatar Marge Bot committed
      Silly users sometimes try to use visible dependent quantification
      and polymorphic recursion without a CUSK or SAK. This causes
      unexpected errors. So we now adjust expectations with a bit
      of helpful messaging.
      
      Closes #17541 and closes #17131.
      
      test cases: dependent/should_fail/T{17541{,b},17131}
      2d1b9619
    • Crazycolorz5's avatar
      rts: Specialize hashing at call site rather than in struct. · f80c4a66
      Crazycolorz5 authored and Marge Bot's avatar Marge Bot committed
      Separate word and string hash tables on the type level, and do not store
      the hashing function.  Thus when a different hash function is desire it
      is provided upon accessing the table. This is worst case the same as
      before the change, and in the majority of cases is better. Also mark the
      functions for aggressive inlining to improve performance.  {F1686506}
      
      Reviewers: bgamari, erikd, simonmar
      
      Subscribers: rwbarton, thomie, carter
      
      GHC Trac Issues: #13165
      
      Differential Revision: https://phabricator.haskell.org/D4889
      f80c4a66
Loading