From 35efc8e4b04cba1b6310ce908520ed5a969f7baa Mon Sep 17 00:00:00 2001 From: Pierre Krieger <pierre.krieger1708@gmail.com> Date: Mon, 30 Nov 2020 18:43:47 +0100 Subject: [PATCH] Fix bad state transition with DisabledPendingEnable+OpenDesiredByRemote (#7638) --- .../src/protocol/generic_proto/behaviour.rs | 30 +++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/substrate/client/network/src/protocol/generic_proto/behaviour.rs b/substrate/client/network/src/protocol/generic_proto/behaviour.rs index f76b3cc7160..51d7252d5f9 100644 --- a/substrate/client/network/src/protocol/generic_proto/behaviour.rs +++ b/substrate/client/network/src/protocol/generic_proto/behaviour.rs @@ -1575,34 +1575,20 @@ impl NetworkBehaviour for GenericProto { } } - // DisabledPendingEnable => DisabledPendingEnable | Incoming + // DisabledPendingEnable => Enabled | DisabledPendingEnable PeerState::DisabledPendingEnable { mut connections, timer, timer_deadline } => { if let Some((_, connec_state)) = connections.iter_mut().find(|(c, _)| *c == connection) { if let ConnectionState::Closed = *connec_state { - *connec_state = ConnectionState::OpenDesiredByRemote; - - let incoming_id = self.next_incoming_index; - self.next_incoming_index.0 = match self.next_incoming_index.0.checked_add(1) { - Some(v) => v, - None => { - error!(target: "sub-libp2p", "Overflow in next_incoming_index"); - return - } - }; - - debug!(target: "sub-libp2p", "PSM <= Incoming({}, {:?}).", - source, incoming_id); - self.peerset.incoming(source.clone(), incoming_id); - self.incoming.push(IncomingPeer { + debug!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Open", + source, connection); + self.events.push_back(NetworkBehaviourAction::NotifyHandler { peer_id: source.clone(), - alive: true, - incoming_id, + handler: NotifyHandler::One(connection), + event: NotifsHandlerIn::Open, }); + *connec_state = ConnectionState::Opening; - *entry.into_mut() = PeerState::Incoming { - connections, - backoff_until: Some(timer_deadline), - }; + *entry.into_mut() = PeerState::Enabled { connections }; } else { // Connections in `OpeningThenClosing` are in a Closed phase, and -- GitLab