diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-12-05 00:36:46 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-12-05 00:36:46 +0100 |
commit | 4ae7612284a216b1b6ce0ecdcccef8439dfa7fe4 (patch) | |
tree | 75e1e2387d07cf91093ccfec3e3a60b2042263ff | |
parent | 4c76aeab0e2d2dfdd76b1bbd8f74e31117e63494 (diff) |
remove closed sessions from hashmap
-rw-r--r-- | src/main.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs index 86eb117..851adef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -122,6 +122,24 @@ impl russh::server::Handler for Server { async fn channel_close(self, channel: ChannelId, session: Session) -> Result<(Self, Session)> { println!("[info] [{}] close session", channel); + + { + let mut clients = self.clients.lock().await; + + let mut del_id = None; + for ((id, ch), _) in clients.iter() { + if *ch == channel { + del_id = Some(*id); + } + } + + if let Some(id) = del_id { + clients.remove(&(id, channel)); + } else { + println!("[warn] [{}] no session", channel); + } + } + Ok((self, session)) } } |