Self-terminate after closed AIO scope refusal - #39
Draft
soulomoon wants to merge 2 commits into
Draft
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #38.
Summary
AsyncCancelledwhen a registered parent observes that a child was refused by a closed AIO scopeWhy
PR #38 prevents refused children from starting their rule bodies, but the parent currently parks in
waitForScopeCancellationuntil another thread cancels it. Once the parent has observed that its captured scope is closed, it can terminate itself immediately. ThrowingAsyncCancelledalso runs that parent's normal AIO exception cleanup, which cancels any admitted sibling work it still owns.Regression
The new test first records two dependencies for a parent key, then publishes a lazy refresh tied to one build's AIO scope. A second build selects that refresh before the first scope closes and forces it afterward. The nested multi-spawn observes the closed scope, and the test requires the second build to finish by raising
AsyncCancelledwithout external cancellation.Validation
cabal test hls-graph:test:tests -fpedantic --test-show-details=direct --test-option=-p --test-option='/self-terminates when nested work/'cabal test hls-graph:test:tests -fpedantic --test-show-details=directhls-graphtests passedstylish-haskellpre-commit hook passedgit diff --check