-
Notifications
You must be signed in to change notification settings - Fork 529
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
Fix cancelation leak in fromFuture
, fromFutureCancelable
#3892
Merged
djspiewak
merged 12 commits into
typelevel:series/3.5.x
from
TimWSpence:3891-fix-future-leak
Nov 23, 2023
Merged
Changes from 2 commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
e9bf16d
Fix leak in fromFutureCancelable
TimWSpence 4d0a3c9
Attempt to fix leak in fromFuture as well
TimWSpence 76b8026
Avoid leaking future in fromFutureCancelable and reduce opportunity for
TimWSpence 6b25b6d
Fix leaks in Async#fromFuture plus tests
TimWSpence 22effa2
Rewrite fromFuture test using TestControl ala existing
TimWSpence 361ca8f
Fix Async#fromFutureCancelable
TimWSpence a9fb7b3
scalafixAll
TimWSpence 73eb17b
Make async node cancelable in Async#fromFutureCancelable
TimWSpence 38a2919
Fix new cancelation leak
TimWSpence 36f1d8d
scalafixAll
TimWSpence 7229547
Turns out bug is reproducible with TestControl
TimWSpence 77c404a
One day I will remember to run scalafix
TimWSpence File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we have to use
uncancelable
+poll
. Otherwise starting theFuture
withfutCancel
is not cancelable, and it can be. It's only after we've started it, that we need guarantee theasync
is setup appropriately.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I hope that is sufficient anyway, otherwise we'd have to drop down to
cont
😬There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well I did only say that I'd fix the leak 😛
Yeah I was wondering about that as I wrote it. I'll give it a go with
uncancelable
/poll
. Although I did notice that inAsyncPlatform#fromCompletableFuture
we changed it to usecont
. I don't suppose you remember why?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's because the cancelation protocol for
CompletableFuture
is more complex: even if you request cancelation, it may indicate to you that it hasn't canceled in which case you need to fallback to waiting for the result. The best way to express this is withcont
.(Aside, but CE doesn't really handle this well, we still have leaks even in the
cont
-based implementation #3474).