add a poll variant to DmaStreamReader::get_buffer_aligned#449
Merged
HippoBaro merged 2 commits intoDataDog:masterfrom Nov 4, 2021
Merged
add a poll variant to DmaStreamReader::get_buffer_aligned#449HippoBaro merged 2 commits intoDataDog:masterfrom
DmaStreamReader::get_buffer_aligned#449HippoBaro merged 2 commits intoDataDog:masterfrom
Conversation
|
Greetings @HippoBaro! It looks like your PR added a new or changed an existing dependency, and CI has failed to validate your changes.
Thank you! |
waynexia
reviewed
Oct 24, 2021
102f0db to
4d91894
Compare
|
Greetings @HippoBaro! It looks like your PR added a new or changed an existing dependency, and CI has failed to validate your changes.
Thank you! |
4d91894 to
12e67b5
Compare
Since `DmaStreamReader` is a stream, we have to play well with other
streams and make our functions easy to use from a polling context.
`get_buffer_aligned` is an async function and, as such, is hard to use
from there (not impossible, just hard).
If we look at the `AsyncRead` trait, one may see that it defines only
poll functions. Async functions are then built on top in the
`AsyncReadExt.` This is done because creating a future from a poll
function is trivial, while the other way around is hard.
Therefore, we create a new function `poll_get_buffer_aligned` and we
reimplement `get_buffer_aligned` as a wrapper around it:
```rust
pub async fn get_buffer_aligned(&mut self, len: u64) -> Result<ReadResult> {
poll_fn(|cx| self.poll_get_buffer_aligned(cx, len)).await
}
```
Function returning `std::task::Poll` enums are usually called `poll_*` to tell them apart from their async variants.
12e67b5 to
5850658
Compare
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.
What does this PR do?
Related to #445 and #446
Since
DmaStreamReaderis a stream, we have to play well with otherstreams and make our functions easy to use from a polling context.
get_buffer_alignedis an async function and, as such, is hard to usefrom there (not impossible, just hard).
If we look at the
AsyncReadtrait, one may see that it defines onlypoll functions. Async functions are then built on top in the
AsyncReadExt.This is done because creating a future from a pollfunction is trivial, while the other way around is hard.
Therefore, we create a new function
poll_get_buffer_alignedand wereimplement
get_buffer_alignedas a wrapper around it: