Get large body writes working
This commit is contained in:
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
use bytes::buf::Take;
|
||||
|
||||
use std::cmp;
|
||||
use std::{fmt, cmp};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub(super) struct Prioritize<B> {
|
||||
@@ -26,7 +26,6 @@ pub(super) struct Prioritize<B> {
|
||||
conn_task: Option<task::Task>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub(crate) struct Prioritized<B> {
|
||||
// The buffer
|
||||
inner: Take<B>,
|
||||
@@ -253,18 +252,23 @@ impl<B> Prioritize<B>
|
||||
store: &mut Store<B>,
|
||||
dst: &mut Codec<T, Prioritized<B>>) -> bool
|
||||
{
|
||||
trace!("try reclaim frame");
|
||||
|
||||
// First check if there are any data chunks to take back
|
||||
if let Some(frame) = dst.take_last_data_frame() {
|
||||
trace!(" -> reclaimed; frame={:?}", frame);
|
||||
|
||||
let mut eos = false;
|
||||
let key = frame.payload().stream;
|
||||
|
||||
let mut frame = frame.map(|prioritized| {
|
||||
// TODO: Ensure fully written
|
||||
eos = prioritized.end_of_stream;
|
||||
prioritized.inner.into_inner()
|
||||
});
|
||||
|
||||
if frame.payload().has_remaining() {
|
||||
let mut stream = store.resolve(frame.payload().stream);
|
||||
|
||||
let mut eos = false;
|
||||
|
||||
let mut frame = frame.map(|prioritized| {
|
||||
// TODO: Ensure fully written
|
||||
eos = prioritized.end_of_stream;
|
||||
prioritized.inner.into_inner()
|
||||
});
|
||||
let mut stream = store.resolve(key);
|
||||
|
||||
if eos {
|
||||
frame.set_end_stream();
|
||||
@@ -312,3 +316,13 @@ impl<B> Buf for Prioritized<B>
|
||||
self.inner.advance(cnt)
|
||||
}
|
||||
}
|
||||
|
||||
impl<B: Buf> fmt::Debug for Prioritized<B> {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt.debug_struct("Prioritized")
|
||||
.field("remaining", &self.inner.get_ref().remaining())
|
||||
.field("end_of_stream", &self.end_of_stream)
|
||||
.field("stream", &self.stream)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user