-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
task: use pin-project for TaskLocalFuture
#5758
task: use pin-project for TaskLocalFuture
#5758
Conversation
Signed-off-by: Bugen Zhao <[email protected]>
Signed-off-by: Bugen Zhao <[email protected]>
#[pin] | ||
_pinned: PhantomPinned, |
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'm not really clear about whether we need this Future
to be !Unpin
, as making it Unpin
seems to make life easier in some situations.
For example, if the feature in #5743 is added, it'll be common that we poll this with &mut fut
to avoid the future being consumed, then we're able to take the value back after getting Ready
. If the future is always !Unpin
, we are not able to take back the ownership of the future. :(
Currently, I leave it untouched according to #3943 (comment). IIUC, this is considered to be a breaking change in the compatibility?
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.
Removing the PhantomPinned
field would not be breaking, but we could never undo it because that would be breaking.
As for into_value
, you make a good point. That method would not be able to take ownership of the future.
Signed-off-by: Bugen Zhao <[email protected]>
Signed-off-by: Bugen Zhao <[email protected]>
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.
Thanks!
Motivation
As
pin-project-lite
supported customDrop
implementation in taiki-e/pin-project-lite#25, I suppose it's worthwhile switching back to thepin-project
implementation to eliminate unsafe code forTaskLocalFuture
.Solution
Implement
TaskLocalFuture
withpin_project_lite::pin_project!
withPinnedDrop
.