Notify RecvStream tasks if SendStream sends a local reset
This commit is contained in:
		| @@ -671,15 +671,9 @@ where | ||||
|         }; | ||||
|  | ||||
|         let stream = me.store.resolve(key); | ||||
|         let actions = &mut me.actions; | ||||
|         let mut send_buffer = self.send_buffer.inner.lock().unwrap(); | ||||
|         let send_buffer = &mut *send_buffer; | ||||
|  | ||||
|         me.counts.transition(stream, |counts, stream| { | ||||
|             actions.send.send_reset( | ||||
|                 reason, send_buffer, stream, counts, &mut actions.task); | ||||
|             actions.recv.enqueue_reset_expiration(stream, counts) | ||||
|         }) | ||||
|         me.actions.send_reset(stream, reason, &mut me.counts, send_buffer); | ||||
|     } | ||||
|  | ||||
|     pub fn send_go_away(&mut self, last_processed_id: StreamId) { | ||||
| @@ -848,14 +842,10 @@ impl<B> StreamRef<B> { | ||||
|         let me = &mut *me; | ||||
|  | ||||
|         let stream = me.store.resolve(self.opaque.key); | ||||
|         let actions = &mut me.actions; | ||||
|         let mut send_buffer = self.send_buffer.inner.lock().unwrap(); | ||||
|         let send_buffer = &mut *send_buffer; | ||||
|  | ||||
|         me.counts.transition(stream, |counts, stream| { | ||||
|             actions.send.send_reset( | ||||
|                 reason, send_buffer, stream, counts, &mut actions.task) | ||||
|         }) | ||||
|         me.actions.send_reset(stream, reason, &mut me.counts, send_buffer); | ||||
|     } | ||||
|  | ||||
|     pub fn send_response( | ||||
| @@ -1178,6 +1168,22 @@ impl<B> SendBuffer<B> { | ||||
| // ===== impl Actions ===== | ||||
|  | ||||
| impl Actions { | ||||
|     fn send_reset<B>( | ||||
|         &mut self, | ||||
|         stream: store::Ptr, | ||||
|         reason: Reason, | ||||
|         counts: &mut Counts, | ||||
|         send_buffer: &mut Buffer<Frame<B>>, | ||||
|     ) { | ||||
|         counts.transition(stream, |counts, stream| { | ||||
|             self.send.send_reset( | ||||
|                 reason, send_buffer, stream, counts, &mut self.task); | ||||
|             self.recv.enqueue_reset_expiration(stream, counts); | ||||
|             // if a RecvStream is parked, ensure it's notified | ||||
|             stream.notify_recv(); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     fn reset_on_recv_stream_err<B>( | ||||
|         &mut self, | ||||
|         buffer: &mut Buffer<Frame<B>>, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user