Skip to content
Snippets Groups Projects
This project is mirrored from https://github.com/haskell/Cabal. Pull mirroring updated .
  1. Feb 23, 2022
    • Mikolaj Konarski's avatar
      Merge pull request #7995 from robx/cleanup-processes · ddf3ba20
      Mikolaj Konarski authored
      Cleanup around subprocess helpers
    • Mikolaj Konarski's avatar
      Merge pull request #7929 from robx/fix-interrupt · 001e3cc8
      Mikolaj Konarski authored
      Fix concurrency/exception bugs in asyncFetchPackages
    • Robert's avatar
      Add changelog entry · 458bc3a5
      Robert authored
      458bc3a5
    • Robert's avatar
      Use async-safe bracket for withTempFileName · 4a0b05a3
      Robert authored
      If `withTempFileName` receives an asynchronous exception (e.g.
      a canceled async), the bracket cleanup handler will attempt to
      remove the temporary file. This can fail with an IO exception.
      
      Regular bracket then throws that IO exception, swallowing the
      asynchronous exception. To calling code, this appears no different
      from an IO exception thrown from the body, and it won't be able
      to tell that it should be exiting promptly.
      
      This manifests concretely during temporary file clean-up of
      `asyncFetchPackages` on Windows (seen during unit testing in CI),
      where temporary file removal fails (on GHC 8.4), which leads
      to `concurrently` failing to cancel the outstanding download
      because it's handled like a regular download failure.
      4a0b05a3
    • Robert's avatar
      Replace use of 'withAsync' by 'concurrently', to not lose exceptions · deca6e7b
      Robert authored
      This fixes deadlock in asyncFetchPackages:
      
        withAsync action1 (\_ -> action2)
      
      loses exceptions thrown by action1. If in addition, action2
      has a dependency on data produced by action1 (as is the case
      here), this will block indefinitely.
      
      (This bug caused some of the new tests to hang, since after
      the change to use async-safe try, it became easier for
      fetchPackages to throw an exception.)
      deca6e7b
    • Robert's avatar
      Use safe `try` in order to not swallow asynchronous exceptions · d0b268ea
      Robert authored
      This is a step towards fixing interrupt handling during
      asynchronous download.
      
      The concrete bug fixed by this changes is  that `try` catches
      asynchronous exceptions, preventing `withAsync` from interrupting
      it when its `body` action finishes prematurely.
      
      This manifests during `cabal build` when hitting Ctrl-C during
      download, e.g.:
      
      1. Ctrl-C interrupts a curl process
      2. This interrupt is converted into a UserInterrupt exception
         via the process package's delegate_ctlc functionality.
      3. UserInterrupt bubbles up through `fetchPackage`, is caught by
         the `try` (fine) and writen to the result mvar.
         Meanwhile, `fetchPackage` continues its loop, starting to
         fetch the next package.
      4. Some `rebuildTarget` is waiting for the interrupted download;
        `waitAsyncFetchPackage` rethrows UserInterrupt in that thread.
      5. UserInterrupt bubbles up through `collectJob`, `execute`, the
         `body` action.
      6. `withAsync`'s finalizer cancels the `fetchPackages` async.
      7. The `fetchPackages` async receives the AsyncCancelled exception
         while fetching the next package (see 3. above). This interrupts
         the download action (it shouldn't matter whether we happen to
         be running curl again or not), and AsyncCancelled bubbles up
         through `fetchPackage`, is caught by the `try` (not fine!) and
         written to the mvar. But no-one is reading that mvar anymore
         because the build job already aborted (step 5), and that
         AsyncCancelled exception is lost.
      8. `fetchPackages` keeps doing its thing, exiting eventually.
      
      Note that this change affects both instances of `try` in this story:
      `UserInterrupt` is also an asynchronous exception, so after the
      change the `UserInterrupt` takes a different path from step 3.
      Followup commits fix bugs along those paths.
      d0b268ea
    • Robert's avatar
      2dc2041f
    • Robert's avatar
      Add dependency on 'safe-exceptions' · 7e81c57d
      Robert authored
      7e81c57d
    • Robert's avatar
      Add some unit tests for asyncFetchPackages · 3e35a521
      Robert authored
      This primarily trigger concurrency bugs that are fixed in the
      follow-up commits.
      3e35a521
    • Robert's avatar
      Extend documentation of asyncFetchPackages · 6652aa58
      Robert authored
      6652aa58
    • Robert's avatar
      Add bounds for dependency 'exception' · 8631e6ae
      Robert authored
      8631e6ae
    • Robert's avatar
      Simplify RepoName · 2591815c
      Robert authored
      2591815c
    • Robert's avatar
      Unittest clean-up · 8900cd09
      Robert authored
      - Sort modules and tests alphabetically (they were maddeningly close to alphabetic)
      - Consistently label unit test groups at top-level
      8900cd09
    • gershomb's avatar
      Better recovery from a few index/tar errors (#7972) · e5dc4dd2
      gershomb authored
      
      * don't crash on a few stray exceptions
      
      * try -> catch and display
      
      * act on reviewer comments
      
      Co-authored-by: default avatarGershom Bazerman <gershom@arista.com>
    • Robert's avatar
      Add changelog · 91fa33bd
      Robert authored
      91fa33bd
    • Robert's avatar
      Remove newly deprecated functions · 97f2c7b3
      Robert authored
      97f2c7b3
    • Robert's avatar
      Deprecate obsolete functions · d5ae20cf
      Robert authored
      d5ae20cf
    • Robert's avatar
      manpage: use rawSystemProcAction · 9d33338c
      Robert authored
      9d33338c
    • Robert's avatar
      LibV09: use rawSystemProcAction · 3aa45a2d
      Robert authored
      3aa45a2d
  2. Feb 22, 2022
  3. Feb 21, 2022
  4. Feb 19, 2022
    • Andrea Bedini's avatar
      Avoid templating GitHub Actions workflow (#7952) · 65318cc6
      Andrea Bedini authored
      * Avoid templating GitHub Actions workflow
      
      GitHub Actions workflow have sufficient power to express what we need.
      We don't need to maintain and additional templating solution on top.
      
      * Add GHC 9.2, bump bounds, fix syntax
      
      * Switch to official haskell image
      
      * Always run cli tests for ghc 8.2 and above
      
      * Remove step to regenerate GitHub Actions workflows
      
      * Fix missed reference to GHC version
      
      * Fix yaml syntax
      
      * Fix type in the GHC version
      
      * More CI changes
      
      - Run bootstrap.yml on ubuntu-latest
      - Use explicit matrix for linux.yml
      - Drop containers in favour of haskell setup action
      - Drop workaround for ancient git
      
      * Remove unneeded package from CI setup
      
      I belive this is only necessary to run `cabal man` which we do not in
      the CI.
      
      * Drop old GHCs from the CI
      
      * Switch macos.yml to haskell/action/setup
      
      Also add the same GHC versions as Linux.
      
      * Simplify CI
      
      - Remove cabal-plan, we actually never call it (I think)
      - Remove vendored cabal-doctest
      - Remove few stray allow-newer clauses no longer necessary, apparently
      
      Originally done by @gbaz in PR #7907.
      
      * Mark GHC 9.2.1 as experimental
      
      * Remove reference to cabal-plan from validate.sh
      
      * setup-haskell action already runs cabal update
      
      * Add missing build matrix in test-windows-dogfood
      
      * Replace cabal-plan list-bin with cabal list-bin
      
      * Enable caching in the CI
      
      * Fix typo
      
      * Remove continue-on-error until I figure it out
      
      * Keep naming consistent
      
      * Temporarily disable 8.0.2 on macos
      
      * Add missing step id
      
      * Tweaks
      
      Remove workaround for nektos/act, it accidentally sneaked in.
      
      * More tweaks
      
      * Tweaks
      
      * Restore cabal-plan, temporarily mark everything experimental
      
      cabal list-bin doesn't seem to work like cabal-plan does.
      
      * Tweaks
      
      * Ensure cabal-plan executable gets built
      
      * Install automake on MacOS
      
      * Tweaks
      
      * Tweaks
      
      Link experimental flags to relative GitHub issues
      
      * Fix typo
  5. Feb 18, 2022
  6. Feb 16, 2022
Loading