From a2d94675ebf6bf43b3da5c8a24e354e0c5a0acc6 Mon Sep 17 00:00:00 2001 From: Ruihan Li Date: Sat, 27 Jul 2024 09:31:43 +0800 Subject: [PATCH] Move `impl Drop` to UNIX listeners --- .../src/net/socket/unix/stream/listener.rs | 8 +++++- .../src/net/socket/unix/stream/socket.rs | 28 +------------------ 2 files changed, 8 insertions(+), 28 deletions(-) diff --git a/kernel/aster-nix/src/net/socket/unix/stream/listener.rs b/kernel/aster-nix/src/net/socket/unix/stream/listener.rs index a6935ea7d..c479de8ac 100644 --- a/kernel/aster-nix/src/net/socket/unix/stream/listener.rs +++ b/kernel/aster-nix/src/net/socket/unix/stream/listener.rs @@ -58,6 +58,12 @@ impl Listener { } } +impl Drop for Listener { + fn drop(&mut self) { + unregister_backlog(self.backlog.addr()) + } +} + static BACKLOG_TABLE: BacklogTable = BacklogTable::new(); struct BacklogTable { @@ -194,7 +200,7 @@ fn create_keyable_inode(dentry: &Arc) -> KeyableWeak { KeyableWeak::from(weak_inode) } -pub(super) fn unregister_backlog(addr: &UnixSocketAddrBound) { +fn unregister_backlog(addr: &UnixSocketAddrBound) { BACKLOG_TABLE.remove_backlog(addr); } diff --git a/kernel/aster-nix/src/net/socket/unix/stream/socket.rs b/kernel/aster-nix/src/net/socket/unix/stream/socket.rs index 21829f30b..eb9337296 100644 --- a/kernel/aster-nix/src/net/socket/unix/stream/socket.rs +++ b/kernel/aster-nix/src/net/socket/unix/stream/socket.rs @@ -4,12 +4,7 @@ use core::sync::atomic::AtomicBool; use atomic::Ordering; -use super::{ - connected::Connected, - endpoint::Endpoint, - init::Init, - listener::{unregister_backlog, Listener}, -}; +use super::{connected::Connected, endpoint::Endpoint, init::Init, listener::Listener}; use crate::{ events::{IoEvents, Observer}, fs::{ @@ -71,15 +66,6 @@ impl UnixStreamSocket { ) } - fn bound_addr(&self) -> Option { - let state = self.state.read(); - match &*state { - State::Init(init) => init.addr().cloned(), - State::Listen(listen) => Some(listen.addr().clone()), - State::Connected(connected) => connected.addr().cloned(), - } - } - fn send(&self, buf: &[u8], flags: SendRecvFlags) -> Result { if self.is_nonblocking() { self.try_send(buf, flags) @@ -344,18 +330,6 @@ impl Socket for UnixStreamSocket { } } -impl Drop for UnixStreamSocket { - fn drop(&mut self) { - let Some(bound_addr) = self.bound_addr() else { - return; - }; - - if let State::Listen(_) = &*self.state.read() { - unregister_backlog(&bound_addr); - } - } -} - fn lookup_socket_file(path: &str) -> Result> { let dentry = { let current = current!();