Client::poll_ready() returns an Error if next stream ID would overflow (#103)
Closes #102
This commit is contained in:
		| @@ -250,7 +250,7 @@ where | ||||
|     B: IntoBuf, | ||||
| { | ||||
|     /// Returns `Ready` when new the connection is able to support a new request stream. | ||||
|     pub fn poll_send_request_ready(&mut self) -> Async<()> { | ||||
|     pub fn poll_send_request_ready(&mut self) -> Poll<(), ::Error> { | ||||
|         self.streams.poll_send_request_ready() | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -299,6 +299,10 @@ where | ||||
|         Ok(()) | ||||
|     } | ||||
|  | ||||
|     pub fn ensure_next_stream_id(&self) -> Result<StreamId, UserError> { | ||||
|         self.next_stream_id.map_err(|_| OverflowedStreamId) | ||||
|     } | ||||
|  | ||||
|     /// Returns a new StreamId if the local actor can initiate a new stream. | ||||
|     fn try_open(&self) -> Result<StreamId, UserError> { | ||||
|         if P::is_server() { | ||||
| @@ -306,6 +310,6 @@ where | ||||
|             return Err(UnexpectedFrameType); | ||||
|         } | ||||
|  | ||||
|         self.next_stream_id.map_err(|_| OverflowedStreamId) | ||||
|         self.ensure_next_stream_id() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -403,11 +403,13 @@ impl<B> Streams<B, client::Peer> | ||||
| where | ||||
|     B: Buf, | ||||
| { | ||||
|     pub fn poll_send_request_ready(&mut self) -> Async<()> { | ||||
|     pub fn poll_send_request_ready(&mut self) -> Poll<(), ::Error> { | ||||
|         let mut me = self.inner.lock().unwrap(); | ||||
|         let me = &mut *me; | ||||
|  | ||||
|         me.counts.poll_open_ready() | ||||
|         me.actions.send.ensure_next_stream_id()?; | ||||
|  | ||||
|         Ok(me.counts.poll_open_ready()) | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user