Skip to content

Commit a20e149

Browse files
MSNTCSjunha1
authored andcommitted
Fix duplicate connection bugs
1 parent 5826287 commit a20e149

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
@@ -516,13 +516,15 @@ impl IoHandler<Message> for Handler {
516516
remote_node_id,
517517
token
518518
);
519-
assert_eq!(
520-
None,
521-
self.remote_node_ids_reverse.write().insert(remote_node_id, token),
522-
"{}:{} is already registered",
523-
remote_node_id,
524-
token
525-
);
519+
if !self.remote_node_ids_reverse.write().contains_key(&remote_node_id) {
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+
);
527+
}
526528

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

557561
let mut network_message_size = 0;
558562
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
@@ -477,22 +477,27 @@ impl NetworkExtension<Event> for Extension {
477477
cinfo!(SYNC, "New peer detected #{}", id);
478478
self.send_status(id);
479479

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

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

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

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

0 commit comments

Comments
 (0)