Changed behavior on spurious wakeups of p2p connections.

This commit is contained in:
Revertron
2021-05-10 11:17:03 +02:00
parent 92222dd51b
commit bcb4cc1b6b
2 changed files with 3 additions and 31 deletions
+2 -16
View File
@@ -129,8 +129,7 @@ impl Network {
token => { token => {
if !handle_connection_event(Arc::clone(&context), &mut peers, &poll.registry(), &event) { if !handle_connection_event(Arc::clone(&context), &mut peers, &poll.registry(), &event) {
let _ = peers.close_peer(poll.registry(), &token); let _ = peers.close_peer(poll.registry(), &token);
let context = context.lock().unwrap(); let blocks_count = context.lock().unwrap().chain.get_height();
let blocks_count = context.chain.get_height();
post(crate::event::Event::NetworkStatus { nodes: peers.get_peers_active_count(), blocks: blocks_count }); post(crate::event::Event::NetworkStatus { nodes: peers.get_peers_active_count(), blocks: blocks_count });
} }
} }
@@ -214,22 +213,9 @@ fn handle_connection_event(context: Arc<Mutex<Context>>, peers: &mut Peers, regi
} }
Some(peer) => { Some(peer) => {
if event.is_read_closed() { if event.is_read_closed() {
//debug!("Spurious wakeup for connection {}, ignoring", token.0); debug!("Node from {} disconnected", peer.get_addr().ip());
if peer.spurious() >= 3 {
debug!("Disconnecting socket for 3 spurious wakeups {}", peer.get_addr().ip());
return false; return false;
} }
let interest = if let State::Message{..} = peer.get_state() {
Interest::WRITABLE
} else {
Interest::READABLE
};
let stream = peer.get_stream();
registry.reregister(stream, token, interest).unwrap();
peer.inc_spurious();
return true;
}
peer.reset_spurious();
let mut stream = peer.get_stream(); let mut stream = peer.get_stream();
read_message(&mut stream) read_message(&mut stream)
} }
-14
View File
@@ -15,7 +15,6 @@ pub struct Peer {
public: bool, public: bool,
active: bool, active: bool,
reconnects: u32, reconnects: u32,
spurious: u32,
received_block: u64, received_block: u64,
fork: HashMap<u64, Block> fork: HashMap<u64, Block>
} }
@@ -32,7 +31,6 @@ impl Peer {
public: false, public: false,
active: false, active: false,
reconnects: 0, reconnects: 0,
spurious: 0,
received_block: 0, received_block: 0,
fork: HashMap::new() fork: HashMap::new()
} }
@@ -119,18 +117,6 @@ impl Peer {
self.reconnects = 0; self.reconnects = 0;
} }
pub fn spurious(&self) -> u32 {
self.spurious
}
pub fn inc_spurious(&mut self) {
self.spurious += 1;
}
pub fn reset_spurious(&mut self) {
self.spurious = 0;
}
pub fn disabled(&self) -> bool { pub fn disabled(&self) -> bool {
self.state.disabled() || self.reconnects > 2 self.state.disabled() || self.reconnects > 2
} }