aboutsummaryrefslogtreecommitdiffstats
path: root/src/interface
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-03-09 02:48:52 +0000
committerJake McGinty <me@jake.su>2018-03-09 02:48:52 +0000
commit82fc7a85f8b8c3486b8331d33f0a0f8a61bf160f (patch)
tree499d0aeb4e1d3287e9d8b5d9886ece5abf250b48 /src/interface
parentpeer: enforce max egress packet queue size (diff)
downloadwireguard-rs-82fc7a85f8b8c3486b8331d33f0a0f8a61bf160f.tar.xz
wireguard-rs-82fc7a85f8b8c3486b8331d33f0a0f8a61bf160f.zip
sessions: handle next -> past transition
Diffstat (limited to 'src/interface')
-rw-r--r--src/interface/peer_server.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs
index 534eb1b..622213e 100644
--- a/src/interface/peer_server.rs
+++ b/src/interface/peer_server.rs
@@ -139,7 +139,10 @@ impl PeerServer {
.ok_or_else(|| err_msg("unknown peer pubkey"))?.clone();
let index = Self::unused_index(&mut state);
- let response = peer_ref.borrow_mut().complete_incoming_handshake(addr, index, handshake)?;
+ let (response, dead_index) = peer_ref.borrow_mut().complete_incoming_handshake(addr, index, handshake)?;
+ if let Some(index) = dead_index {
+ let _ = state.index_map.remove(&index);
+ }
let _ = state.index_map.insert(index, peer_ref.clone());
self.send_to_peer((addr, response))?;