diff --git a/src/client.rs b/src/client.rs index fb57f47..d008274 100644 --- a/src/client.rs +++ b/src/client.rs @@ -223,7 +223,7 @@ pub struct Handshake { /// [`Error`]: ../struct.Error.html pub struct SendRequest { inner: proto::Streams, - pending: Option, + pending: Option, } /// Returns a `SendRequest` instance once it is ready to send at least one @@ -568,7 +568,7 @@ where .map_err(Into::into) .map(|stream| { if stream.is_pending_open() { - self.pending = Some(stream.key()); + self.pending = Some(stream.clone_to_opaque()); } let response = ResponseFuture { diff --git a/src/proto/mod.rs b/src/proto/mod.rs index e757019..f9e815d 100644 --- a/src/proto/mod.rs +++ b/src/proto/mod.rs @@ -9,7 +9,7 @@ mod streams; pub(crate) use self::connection::{Config, Connection}; pub(crate) use self::error::Error; pub(crate) use self::peer::{Peer, Dyn as DynPeer}; -pub(crate) use self::streams::{Key as StreamKey, StreamRef, OpaqueStreamRef, Streams}; +pub(crate) use self::streams::{StreamRef, OpaqueStreamRef, Streams}; pub(crate) use self::streams::{PollReset, Prioritized, Open}; use codec::Codec; diff --git a/src/proto/streams/mod.rs b/src/proto/streams/mod.rs index 2f1467a..6216550 100644 --- a/src/proto/streams/mod.rs +++ b/src/proto/streams/mod.rs @@ -12,7 +12,6 @@ mod streams; pub(crate) use self::prioritize::Prioritized; pub(crate) use self::recv::Open; pub(crate) use self::send::PollReset; -pub(crate) use self::store::Key; pub(crate) use self::streams::{StreamRef, OpaqueStreamRef, Streams}; use self::buffer::Buffer; diff --git a/src/proto/streams/streams.rs b/src/proto/streams/streams.rs index dfd261d..2310143 100644 --- a/src/proto/streams/streams.rs +++ b/src/proto/streams/streams.rs @@ -567,7 +567,7 @@ where &mut self, request: Request<()>, end_of_stream: bool, - pending: Option<&store::Key>, + pending: Option<&OpaqueStreamRef>, ) -> Result, SendError> { use http::Method; use super::stream::ContentLength; @@ -593,8 +593,8 @@ where // // If that stream is still pending, the Client isn't allowed to // queue up another pending stream. They should use `poll_ready`. - if let Some(key) = pending { - if me.store.resolve(*key).is_pending_open { + if let Some(stream) = pending { + if me.store.resolve(stream.key).is_pending_open { return Err(UserError::Rejected.into()); } } @@ -697,15 +697,15 @@ impl Streams where B: Buf, { - pub fn poll_pending_open(&mut self, key: Option<&store::Key>) -> Poll<(), ::Error> { + pub fn poll_pending_open(&mut self, pending: Option<&OpaqueStreamRef>) -> Poll<(), ::Error> { let mut me = self.inner.lock().unwrap(); let me = &mut *me; me.actions.ensure_no_conn_error()?; me.actions.send.ensure_next_stream_id()?; - if let Some(key) = key { - let mut stream = me.store.resolve(*key); + if let Some(pending) = pending { + let mut stream = me.store.resolve(pending.key); trace!("poll_pending_open; stream = {:?}", stream.is_pending_open); if stream.is_pending_open { stream.wait_send(); @@ -941,10 +941,6 @@ impl StreamRef { .map_err(From::from) } - pub(crate) fn key(&self) -> store::Key { - self.opaque.key - } - pub fn clone_to_opaque(&self) -> OpaqueStreamRef where B: 'static, { diff --git a/tests/h2-tests/tests/client_request.rs b/tests/h2-tests/tests/client_request.rs index 324e14c..26a9ed4 100644 --- a/tests/h2-tests/tests/client_request.rs +++ b/tests/h2-tests/tests/client_request.rs @@ -916,6 +916,8 @@ fn notify_on_send_capacity() { assert_eq!(response.status(), StatusCode::OK); } + poll_fn(|| client.poll_ready()).wait().unwrap(); + done_tx.send(()).unwrap(); });