From ec6ec92a790cbf28616ef33f613b70df5399e693 Mon Sep 17 00:00:00 2001 From: Toralf Wittner Date: Mon, 10 Sep 2018 10:21:19 +0200 Subject: [PATCH] mplex: fix destroy_substream (#469) Retain all incoming buffer elements with different substream ID or equal Endpoint. The latter was previously not considered which could result in the removal of data for another substream with same ID but opposite Endpoint. --- muxers/mplex/src/lib.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/muxers/mplex/src/lib.rs b/muxers/mplex/src/lib.rs index d83234b8..708f85f6 100644 --- a/muxers/mplex/src/lib.rs +++ b/muxers/mplex/src/lib.rs @@ -506,7 +506,9 @@ where C: AsyncRead + AsyncWrite fn destroy_substream(&self, mut substream: Self::Substream) { let _ = self.shutdown_substream(&mut substream); // TODO: this doesn't necessarily send the close message - self.inner.lock().buffer.retain(|elem| elem.substream_id() != substream.num); + self.inner.lock().buffer.retain(|elem| { + elem.substream_id() != substream.num || elem.endpoint() == Some(substream.endpoint) + }) } }