aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-12-05 00:36:46 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-12-05 00:36:46 +0100
commit4ae7612284a216b1b6ce0ecdcccef8439dfa7fe4 (patch)
tree75e1e2387d07cf91093ccfec3e3a60b2042263ff
parent4c76aeab0e2d2dfdd76b1bbd8f74e31117e63494 (diff)
remove closed sessions from hashmap
-rw-r--r--src/main.rs18
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))
}
}