Skip to content

Commit fb4e70f

Browse files
committed
Fix duplicate connection bugs
1 parent 05f183f commit fb4e70f

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

network/src/p2p/handler.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -517,13 +517,15 @@ impl IoHandler<Message> for Handler {
517517
remote_node_id,
518518
token
519519
);
520-
assert_eq!(
521-
None,
522-
self.remote_node_ids_reverse.write().insert(remote_node_id, token),
523-
"{}:{} is already registered",
524-
remote_node_id,
525-
token
526-
);
520+
if !self.remote_node_ids_reverse.write().contains_key(&remote_node_id) {
521+
assert_eq!(
522+
None,
523+
self.remote_node_ids_reverse.write().insert(remote_node_id, token),
524+
"{}:{} is already registered",
525+
remote_node_id,
526+
token
527+
);
528+
}
527529

528530
let t = inbound_connections.insert(token, connection);
529531
assert!(t.is_none());
@@ -547,13 +549,15 @@ impl IoHandler<Message> for Handler {
547549
remote_node_id,
548550
token
549551
);
550-
assert_eq!(
551-
None,
552-
self.remote_node_ids_reverse.write().insert(remote_node_id, token),
553-
"{}:{} is already registered",
554-
remote_node_id,
555-
token
556-
);
552+
if !self.remote_node_ids_reverse.write().contains_key(&remote_node_id) {
553+
assert_eq!(
554+
None,
555+
self.remote_node_ids_reverse.write().insert(remote_node_id, token),
556+
"{}:{} is already registered",
557+
remote_node_id,
558+
token
559+
);
560+
}
557561

558562
let mut network_message_size = 0;
559563
for (name, versions) in self.client.extension_versions() {

sync/src/block/extension.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -476,22 +476,27 @@ impl NetworkExtension<Event> for Extension {
476476
cinfo!(SYNC, "New peer detected #{}", id);
477477
self.send_status(id);
478478

479-
let t = self.connected_nodes.insert(*id);
480-
debug_assert!(t, "{} is already added to peer list", id);
479+
if !self.connected_nodes.contains(id) {
480+
let t = self.connected_nodes.insert(*id);
481+
debug_assert!(t, "{} is already added to peer list", id);
482+
}
481483

482484
let token = self.token_generator.gen().expect("Token generator is full");
483485
let token_info = TokenInfo {
484486
node_id: *id,
485487
request_id: None,
486488
};
487489

488-
let t = self.requests.insert(*id, Vec::new());
489-
debug_assert_eq!(None, t);
490-
let t = self.tokens_info.insert(token, token_info);
491-
debug_assert_eq!(None, t);
492-
let t = self.tokens.insert(*id, token);
493-
debug_assert_eq!(None, t);
494-
debug_assert!(t.is_none());
490+
if !self.requests.contains_key(id) {
491+
let t = self.requests.insert(*id, Vec::new());
492+
debug_assert_eq!(None, t);
493+
}
494+
self.tokens_info.entry(token).or_insert(token_info);
495+
if !self.tokens.contains_key(id) {
496+
let t = self.tokens.insert(*id, token);
497+
debug_assert_eq!(None, t);
498+
debug_assert!(t.is_none());
499+
}
495500
}
496501

497502
fn on_node_removed(&mut self, id: &NodeId) {

0 commit comments

Comments
 (0)