Move impl Drop to UNIX listeners

This commit is contained in:
Ruihan Li
2024-07-27 09:31:43 +08:00
committed by Tate, Hongliang Tian
parent 98e2a99195
commit a2d94675eb
2 changed files with 8 additions and 28 deletions

View File

@ -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<Dentry>) -> KeyableWeak<dyn Inode> {
KeyableWeak::from(weak_inode)
}
pub(super) fn unregister_backlog(addr: &UnixSocketAddrBound) {
fn unregister_backlog(addr: &UnixSocketAddrBound) {
BACKLOG_TABLE.remove_backlog(addr);
}

View File

@ -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<UnixSocketAddrBound> {
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<usize> {
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<Arc<Dentry>> {
let dentry = {
let current = current!();