Fix stack overflow when printing a SubstreamRef (#599)

* Fix stack overflow when printing a SubstreamRef

* Fix concern

* More problems
This commit is contained in:
Pierre Krieger
2018-11-03 09:54:31 +01:00
committed by GitHub
parent fc63947e7b
commit 631ceaea4b
3 changed files with 25 additions and 18 deletions

View File

@ -268,9 +268,10 @@ impl<P> fmt::Debug for SubstreamRef<P>
where where
P: Deref, P: Deref,
P::Target: StreamMuxer, P::Target: StreamMuxer,
<P::Target as StreamMuxer>::Substream: fmt::Debug,
{ {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
write!(f, "Substream({:?})", self) write!(f, "Substream({:?})", self.substream)
} }
} }

View File

@ -80,7 +80,6 @@ enum StreamState {
} }
/// Event that can happen on the `NodeStream`. /// Event that can happen on the `NodeStream`.
#[derive(Debug)]
pub enum NodeEvent<TMuxer, TUserData> pub enum NodeEvent<TMuxer, TUserData>
where where
TMuxer: muxing::StreamMuxer, TMuxer: muxing::StreamMuxer,
@ -346,32 +345,37 @@ where
} }
} }
// TODO: impl<TMuxer, TUserData> fmt::Debug for NodeEvent<TMuxer, TUserData>
/*impl<TTrans> fmt::Debug for NodeEvent<TTrans> where
where TTrans: Transport, TMuxer: muxing::StreamMuxer,
<TTrans::Listener as Stream>::Error: fmt::Debug, TMuxer::Substream: fmt::Debug,
TUserData: fmt::Debug,
{ {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self { match self {
NodeEvent::Incoming { ref listen_addr, .. } => { NodeEvent::InboundSubstream { substream } => {
f.debug_struct("NodeEvent::Incoming") f.debug_struct("NodeEvent::OutboundClosed")
.field("listen_addr", listen_addr) .field("substream", substream)
.finish() .finish()
}, },
NodeEvent::Closed { ref listen_addr, .. } => { NodeEvent::OutboundSubstream { user_data, substream } => {
f.debug_struct("NodeEvent::Closed") f.debug_struct("NodeEvent::OutboundSubstream")
.field("listen_addr", listen_addr) .field("user_data", user_data)
.field("substream", substream)
.finish() .finish()
}, },
NodeEvent::Error { ref listen_addr, ref error, .. } => { NodeEvent::OutboundClosed { user_data } => {
f.debug_struct("NodeEvent::Error") f.debug_struct("NodeEvent::OutboundClosed")
.field("listen_addr", listen_addr) .field("user_data", user_data)
.field("error", error) .finish()
},
NodeEvent::InboundClosed => {
f.debug_struct("NodeEvent::InboundClosed")
.finish() .finish()
}, },
} }
} }
}*/ }
#[cfg(test)] #[cfg(test)]
mod node_stream { mod node_stream {

View File

@ -27,9 +27,11 @@ use muxing::{StreamMuxer, Shutdown};
use futures::prelude::*; use futures::prelude::*;
/// Substream type /// Substream type
#[derive(Debug)]
pub struct DummySubstream {} pub struct DummySubstream {}
/// OutboundSubstream type /// OutboundSubstream type
#[derive(Debug)]
pub struct DummyOutboundSubstream {} pub struct DummyOutboundSubstream {}
/// Control the muxer state by setting the "connection" state as to set up a mock /// Control the muxer state by setting the "connection" state as to set up a mock