fix(conn): handle when pre-emptive flushing closes the write state
Closes #1391
This commit is contained in:
		| @@ -196,8 +196,9 @@ where I: AsyncRead + AsyncWrite, | |||||||
|                 } |                 } | ||||||
|  |  | ||||||
|             }, |             }, | ||||||
|             Reading::Init | Reading::KeepAlive | Reading::Closed => unreachable!() |             _ => unreachable!("read_body invalid state: {:?}", self.state.reading), | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         self.state.reading = reading; |         self.state.reading = reading; | ||||||
|         ret |         ret | ||||||
|     } |     } | ||||||
| @@ -324,6 +325,14 @@ where I: AsyncRead + AsyncWrite, | |||||||
|  |  | ||||||
|         if self.has_queued_body() { |         if self.has_queued_body() { | ||||||
|             try!(self.flush()); |             try!(self.flush()); | ||||||
|  |  | ||||||
|  |             if !self.can_write_body() { | ||||||
|  |                 if chunk.as_ref().map(|c| c.as_ref().len()).unwrap_or(0) == 0 { | ||||||
|  |                     return Ok(AsyncSink::NotReady(chunk)); | ||||||
|  |                 } else { | ||||||
|  |                     return Ok(AsyncSink::Ready); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         let state = match self.state.writing { |         let state = match self.state.writing { | ||||||
| @@ -369,8 +378,9 @@ where I: AsyncRead + AsyncWrite, | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             }, |             }, | ||||||
|             _ => unreachable!(), |             _ => unreachable!("write_body invalid state: {:?}", self.state.writing), | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         self.state.writing = state; |         self.state.writing = state; | ||||||
|         Ok(AsyncSink::Ready) |         Ok(AsyncSink::Ready) | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user