Make SendStream::poll_capacity never return Ok(Some(0)) (#596)

Fixes #270
This commit is contained in:
Anthony Ramine
2022-01-19 19:49:53 +01:00
committed by GitHub
parent b949d6ef99
commit d92ba1c45b
5 changed files with 85 additions and 19 deletions

View File

@@ -32,6 +32,7 @@ pub async fn yield_once() {
.await;
}
/// Should only be called after a non-0 capacity was requested for the stream.
pub fn wait_for_capacity(stream: h2::SendStream<Bytes>, target: usize) -> WaitForCapacity {
WaitForCapacity {
stream: Some(stream),
@@ -59,6 +60,11 @@ impl Future for WaitForCapacity {
let act = self.stream().capacity();
// If a non-0 capacity was requested for the stream before calling
// wait_for_capacity, then poll_capacity should return Pending
// until there is a non-0 capacity.
assert_ne!(act, 0);
if act >= self.target {
return Poll::Ready(self.stream.take().unwrap().into());
}