-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Effect cancellation #247
Comments
Just dropping my idea for implementing the core->shell side of this from my chat w/ @charypar
There's probably some details that'd need worked out, but I think the approach would work |
Does #279 close this issue and if so will it also update on the roadmap? https://github.com/orgs/redbadger/projects/11 |
It does not - it only adds cancellation to timers and makes it an explicit part of the time capability protocol. This issue is about supporting this for all effects without the capability having to explicitly implement the cancellation semantics. |
Since the command abstraction has been released, the basic cancellation from Core is supported by aborting commands. Resolving aborted effect request is a no-op. Rust shells can cancel effects by dropping the associated The only missing piece is support in the It's worth saying that for most capabilities, this basic support may not be quite enough, as it doesn't easily allow for resource cleanup on the shell side when effects are cancelled. An example of how that might work is the new implementation in |
On a number of occassions I've ended up implementing domain specific signaling in capabilities for canceling effects. This is especially useful for subscriptions.
There are two directions:
In the latter case, attempting to resolve the effect again will, I'm pretty sure, result in a panic at the moment, which is not ideal.
It would be good if Crux could automatically signal to the shell that the subscription has been terminated and any related resources on the shell side can be cleaned up.
The text was updated successfully, but these errors were encountered: