+ let node_entry = nodes.nodes_to_state.entry(addr.clone());
+ match node_entry {
+ hash_map::Entry::Occupied(entry)
+ if entry.get().state == AddressState::Untested &&
+ entry.get().last_services() == 0 &&
+ state == AddressState::Timeout => {
+ entry.remove_entry();
+ nodes.timeout_nodes.insert(&addr, Duration::from_secs(self.get_u64(U64Setting::RescanInterval(AddressState::Timeout))));
+ return AddressState::Untested;
+ },
+ hash_map::Entry::Vacant(_) if state == AddressState::Timeout => {
+ nodes.timeout_nodes.insert(&addr, Duration::from_secs(self.get_u64(U64Setting::RescanInterval(AddressState::Timeout))));
+ return AddressState::Untested;
+ },
+ hash_map::Entry::Vacant(_) if nodes.timeout_nodes.contains(&addr) => {
+ return AddressState::Timeout;
+ },
+ _ => {},
+ }
+
+ let state_ref = node_entry.or_insert(Node {