fix(conn): don't double shutdown in some cases
This commit is contained in:
		| @@ -77,7 +77,7 @@ where | ||||
|                     Ok(Async::NotReady) => unreachable!("dispatch not ready when conn is"), | ||||
|                     Err(()) => { | ||||
|                         trace!("dispatch no longer receiving messages"); | ||||
|                         self.is_closing = true; | ||||
|                         self.close(); | ||||
|                         return Ok(Async::Ready(())); | ||||
|                     } | ||||
|                 } | ||||
| @@ -180,9 +180,7 @@ where | ||||
|                     self.conn.write_head(head, body.is_some()); | ||||
|                     self.body_rx = body; | ||||
|                 } else { | ||||
|                     self.is_closing = true; | ||||
|                     //self.conn.close_read(); | ||||
|                     //self.conn.close_write(); | ||||
|                     self.close(); | ||||
|                     return Ok(Async::Ready(())); | ||||
|                 } | ||||
|             } else if self.conn.has_queued_body() { | ||||
| @@ -218,17 +216,17 @@ where | ||||
|         }) | ||||
|     } | ||||
|  | ||||
|     fn poll_close(&mut self) -> Poll<(), ::Error> { | ||||
|         debug_assert!(self.is_closing); | ||||
|  | ||||
|         try_ready!(self.conn.close_and_shutdown()); | ||||
|     fn close(&mut self) { | ||||
|         self.is_closing = true; | ||||
|         self.conn.close_read(); | ||||
|         self.conn.close_write(); | ||||
|         self.is_closing = false; | ||||
|         Ok(Async::Ready(())) | ||||
|     } | ||||
|  | ||||
|     fn is_done(&self) -> bool { | ||||
|         if self.is_closing { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         let read_done = self.conn.is_read_closed(); | ||||
|  | ||||
|         if !T::should_read_first() && read_done { | ||||
| @@ -262,10 +260,6 @@ where | ||||
|         self.poll_write()?; | ||||
|         self.poll_flush()?; | ||||
|  | ||||
|         if self.is_closing { | ||||
|             self.poll_close()?; | ||||
|         } | ||||
|  | ||||
|         if self.is_done() { | ||||
|             try_ready!(self.conn.shutdown()); | ||||
|             trace!("Dispatch::poll done"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user