mirror of https://github.com/fafhrd91/actix-web
Format dispatcher linger changes
This commit is contained in:
parent
cab4cfcada
commit
f19bab17b1
|
|
@ -32,8 +32,7 @@ use crate::{
|
||||||
config::ServiceConfig,
|
config::ServiceConfig,
|
||||||
error::{DispatchError, ParseError, PayloadError},
|
error::{DispatchError, ParseError, PayloadError},
|
||||||
service::HttpFlow,
|
service::HttpFlow,
|
||||||
ConnectionType, Error, Extensions, HttpMessage, OnConnectData, Request, Response,
|
ConnectionType, Error, Extensions, HttpMessage, OnConnectData, Request, Response, StatusCode,
|
||||||
StatusCode,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const LW_BUFFER_SIZE: usize = 1024;
|
const LW_BUFFER_SIZE: usize = 1024;
|
||||||
|
|
@ -383,7 +382,10 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn poll_linger(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Result<Poll<()>, DispatchError> {
|
fn poll_linger(
|
||||||
|
mut self: Pin<&mut Self>,
|
||||||
|
cx: &mut Context<'_>,
|
||||||
|
) -> Result<Poll<()>, DispatchError> {
|
||||||
if self.as_mut().poll_flush(cx)?.is_pending() {
|
if self.as_mut().poll_flush(cx)?.is_pending() {
|
||||||
return Ok(Poll::Pending);
|
return Ok(Poll::Pending);
|
||||||
}
|
}
|
||||||
|
|
@ -459,7 +461,11 @@ where
|
||||||
|
|
||||||
self.as_mut().project().state.set(State::None);
|
self.as_mut().project().state.set(State::None);
|
||||||
}
|
}
|
||||||
_ => self.as_mut().project().state.set(State::SendPayload { body }),
|
_ => self
|
||||||
|
.as_mut()
|
||||||
|
.project()
|
||||||
|
.state
|
||||||
|
.set(State::SendPayload { body }),
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
@ -598,10 +604,8 @@ where
|
||||||
// this.payload was the payload for the request we just finished
|
// this.payload was the payload for the request we just finished
|
||||||
// responding to. We can check to see if we finished reading it
|
// responding to. We can check to see if we finished reading it
|
||||||
// yet, and if not, shutdown the connection.
|
// yet, and if not, shutdown the connection.
|
||||||
let linger = should_linger(
|
let linger =
|
||||||
this.payload.as_ref(),
|
should_linger(this.payload.as_ref(), *this.payload_drainable);
|
||||||
*this.payload_drainable,
|
|
||||||
);
|
|
||||||
let not_pipelined = this.messages.is_empty();
|
let not_pipelined = this.messages.is_empty();
|
||||||
|
|
||||||
// payload stream finished.
|
// payload stream finished.
|
||||||
|
|
@ -652,10 +656,8 @@ where
|
||||||
// this.payload was the payload for the request we just finished
|
// this.payload was the payload for the request we just finished
|
||||||
// responding to. We can check to see if we finished reading it
|
// responding to. We can check to see if we finished reading it
|
||||||
// yet, and if not, shutdown the connection.
|
// yet, and if not, shutdown the connection.
|
||||||
let linger = should_linger(
|
let linger =
|
||||||
this.payload.as_ref(),
|
should_linger(this.payload.as_ref(), *this.payload_drainable);
|
||||||
*this.payload_drainable,
|
|
||||||
);
|
|
||||||
let not_pipelined = this.messages.is_empty();
|
let not_pipelined = this.messages.is_empty();
|
||||||
|
|
||||||
// payload stream finished.
|
// payload stream finished.
|
||||||
|
|
|
||||||
|
|
@ -87,8 +87,8 @@ fn drop_payload_service() -> impl Service<Request, Response = Response<&'static
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ignore_payload_service() -> impl Service<Request, Response = Response<&'static str>, Error = Error>
|
fn ignore_payload_service(
|
||||||
{
|
) -> impl Service<Request, Response = Response<&'static str>, Error = Error> {
|
||||||
fn_service(|_req: Request| ready(Ok::<_, Error>(Response::with_body(StatusCode::OK, "ok"))))
|
fn_service(|_req: Request| ready(Ok::<_, Error>(Response::with_body(StatusCode::OK, "ok"))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue