perf(http2): don't register callback with main h2 client task
This commit is contained in:
@@ -178,14 +178,21 @@ pub enum Callback<T, U> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T, U> Callback<T, U> {
|
impl<T, U> Callback<T, U> {
|
||||||
pub fn poll_cancel(&mut self) -> Poll<(), ()> {
|
pub(crate) fn is_canceled(&self) -> bool {
|
||||||
|
match *self {
|
||||||
|
Callback::Retry(ref tx) => tx.is_canceled(),
|
||||||
|
Callback::NoRetry(ref tx) => tx.is_canceled(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn poll_cancel(&mut self) -> Poll<(), ()> {
|
||||||
match *self {
|
match *self {
|
||||||
Callback::Retry(ref mut tx) => tx.poll_cancel(),
|
Callback::Retry(ref mut tx) => tx.poll_cancel(),
|
||||||
Callback::NoRetry(ref mut tx) => tx.poll_cancel(),
|
Callback::NoRetry(ref mut tx) => tx.poll_cancel(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send(self, val: Result<U, (::Error, Option<T>)>) {
|
pub(crate) fn send(self, val: Result<U, (::Error, Option<T>)>) {
|
||||||
match self {
|
match self {
|
||||||
Callback::Retry(tx) => {
|
Callback::Retry(tx) => {
|
||||||
let _ = tx.send(val);
|
let _ = tx.send(val);
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ where
|
|||||||
match self.rx.poll() {
|
match self.rx.poll() {
|
||||||
Ok(Async::Ready(Some((req, mut cb)))) => {
|
Ok(Async::Ready(Some((req, mut cb)))) => {
|
||||||
// check that future hasn't been canceled already
|
// check that future hasn't been canceled already
|
||||||
if let Async::Ready(()) = cb.poll_cancel().expect("poll_cancel cannot error") {
|
if cb.is_canceled() {
|
||||||
trace!("request canceled");
|
trace!("request canceled");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ where
|
|||||||
Ok(ok) => ok,
|
Ok(ok) => ok,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
debug!("client send request error: {}", err);
|
debug!("client send request error: {}", err);
|
||||||
let _ = cb.send(Err((::Error::new_h2(err), None)));
|
cb.send(Err((::Error::new_h2(err), None)));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -147,11 +147,11 @@ where
|
|||||||
let content_length = content_length_parse_all(res.headers());
|
let content_length = content_length_parse_all(res.headers());
|
||||||
let res = res.map(|stream|
|
let res = res.map(|stream|
|
||||||
::Body::h2(stream, content_length));
|
::Body::h2(stream, content_length));
|
||||||
let _ = cb.send(Ok(res));
|
cb.send(Ok(res));
|
||||||
},
|
},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
debug!("client response error: {}", err);
|
debug!("client response error: {}", err);
|
||||||
let _ = cb.send(Err((::Error::new_h2(err), None)));
|
cb.send(Err((::Error::new_h2(err), None)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user