This project is mirrored from https://github.com/haskell/Cabal.
Pull mirroring updated .
- Feb 25, 2022
-
-
gershomb authored
* wip to add test-code-generators field to test stanzas * fixups * change hashes * regen golden parser test output * docs and changelog * test * Update pr-7688 * tweak test Co-authored-by:
Gershom Bazerman <gershom@arista.com>
-
mergify[bot] authored
fix list-bin to only choose the selected component
-
Mel Zuser authored
-
Mel Zuser authored
-
Lars Kuhtz authored
-
Lars Kuhtz authored
-
Lars Kuhtz authored
-
- Feb 24, 2022
-
-
mergify[bot] authored
Use ref instead head_ref to cancelling jobs
-
Javier Neira authored
-
Mikolaj Konarski authored
Post remove ci templates
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
Javier Neira authored
-
- Feb 23, 2022
-
-
Mikolaj Konarski authored
Remove overlapping patterns
-
Andrea Bedini authored
These two `otherwise`s have been dead code since about 2016 but GHC has started warning about them only since 9.2.
-
Mikolaj Konarski authored
Cleanup around subprocess helpers
-
Mikolaj Konarski authored
Fix concurrency/exception bugs in asyncFetchPackages
-
Robert authored
-
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.
-
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.)
-
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.
-
Robert authored
-
Robert authored
-
Robert authored
This primarily trigger concurrency bugs that are fixed in the follow-up commits.
-
Robert authored
-