Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Do not run tasks when their prerequisites fail
If tasks A and B both depend on C, they race to grab the invocation lock on C. If A wins, it sets @already_invoked and executes C while holding the lock. When C completes, A releases the lock, B acquires it and immediately returns since C is @already_invoked. Unfortunately, this does not distinguish failed execution of C. Instead, if executing C raises an exception for A, we want to raise the same exception in B so it is aborted.
- Loading branch information