From 8c77a9f4c1387636b772a2acaa7f4d304020fcad Mon Sep 17 00:00:00 2001 From: LINGLUO00 <3425375449@qq.com> Date: Fri, 24 Jan 2025 14:40:23 +0800 Subject: [PATCH 1/4] draft pr commit --- kernel/src/net/socket/unix/seqpacket/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/src/net/socket/unix/seqpacket/mod.rs b/kernel/src/net/socket/unix/seqpacket/mod.rs index bce9cbbf0..447aec7fe 100644 --- a/kernel/src/net/socket/unix/seqpacket/mod.rs +++ b/kernel/src/net/socket/unix/seqpacket/mod.rs @@ -300,6 +300,7 @@ impl Socket for SeqpacketSocket { return Ok(()); } // TODO: 释放INODE_MAP相关资源 + // Gonna fix by YL // 尝试释放相关抽象地址资源 let _ = remove_abs_addr(&path); From ba468c02f5b4555018707ff7d43c92028f2e4fc4 Mon Sep 17 00:00:00 2001 From: LINGLUO00 <3425375449@qq.com> Date: Sat, 25 Jan 2025 09:14:11 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=87=AA=E5=B7=B1=E5=B0=9D=E8=AF=95?= =?UTF-8?q?=E6=8F=90=E4=BA=A4pr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/src/net/socket/unix/seqpacket/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/src/net/socket/unix/seqpacket/mod.rs b/kernel/src/net/socket/unix/seqpacket/mod.rs index 447aec7fe..53ecf2ca4 100644 --- a/kernel/src/net/socket/unix/seqpacket/mod.rs +++ b/kernel/src/net/socket/unix/seqpacket/mod.rs @@ -301,6 +301,7 @@ impl Socket for SeqpacketSocket { } // TODO: 释放INODE_MAP相关资源 // Gonna fix by YL + //test_for_pr // 尝试释放相关抽象地址资源 let _ = remove_abs_addr(&path); From 2ec6abc912bef5c54e86e02b1678cc78cc57c08b Mon Sep 17 00:00:00 2001 From: LINGLUO00 <3425375449@qq.com> Date: Mon, 17 Feb 2025 20:46:49 +0800 Subject: [PATCH 3/4] =?UTF-8?q?unix=20socket=20=E7=9B=B8=E5=85=B3=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E9=87=8A=E6=94=BE=20#991?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/src/net/socket/unix/seqpacket/mod.rs | 30 +++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/kernel/src/net/socket/unix/seqpacket/mod.rs b/kernel/src/net/socket/unix/seqpacket/mod.rs index 53ecf2ca4..dab6bfd26 100644 --- a/kernel/src/net/socket/unix/seqpacket/mod.rs +++ b/kernel/src/net/socket/unix/seqpacket/mod.rs @@ -299,13 +299,33 @@ impl Socket for SeqpacketSocket { if path.is_empty() { return Ok(()); } - // TODO: 释放INODE_MAP相关资源 - // Gonna fix by YL - //test_for_pr - // 尝试释放相关抽象地址资源 - let _ = remove_abs_addr(&path); + //释放INODE_MAP相关资源 + match self.get_name()? { + Endpoint::Unixpath((inode_id, _)) => { + // 从 INODE_MAP 中移除对应的 inode + let mut inode_guard = INODE_MAP.write_irqsave(); + inode_guard.remove(&inode_id); + }, + Endpoint::Abspath((abshandle, _)) => { + // 从 ABS_INODE_MAP 中移除对应的地址 + let mut abs_inode_map = ABS_INODE_MAP.lock_irqsave(); + abs_inode_map.remove(&abshandle.name()); + }, + _ => { + log::error!("Invalid endpoint in close"); + return Err(SystemError::EINVAL); + } + }; + + + *self.inner.write() = Inner::Init(Init::new()); + + self.wait_queue.wakeup(None); + return Ok(()); + + } fn get_peer_name(&self) -> Result { From 52e7acaad36d0f54fede1b0918adc24ddb245868 Mon Sep 17 00:00:00 2001 From: LINGLUO00 <3425375449@qq.com> Date: Wed, 19 Feb 2025 20:46:11 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=AE=8C=E5=96=84streamsocket=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E9=87=8A=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/src/net/socket/unix/seqpacket/mod.rs | 7 ++++--- kernel/src/net/socket/unix/stream/mod.rs | 22 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/kernel/src/net/socket/unix/seqpacket/mod.rs b/kernel/src/net/socket/unix/seqpacket/mod.rs index dab6bfd26..07f6232b8 100644 --- a/kernel/src/net/socket/unix/seqpacket/mod.rs +++ b/kernel/src/net/socket/unix/seqpacket/mod.rs @@ -318,13 +318,14 @@ impl Socket for SeqpacketSocket { } }; - + //将socket状态置为Init *self.inner.write() = Inner::Init(Init::new()); - + //唤醒等待队列 self.wait_queue.wakeup(None); + //抽象地址空间的资源回收 + let _ = remove_abs_addr(&path); return Ok(()); - } diff --git a/kernel/src/net/socket/unix/stream/mod.rs b/kernel/src/net/socket/unix/stream/mod.rs index b9ebc9dcd..f17bfa32a 100644 --- a/kernel/src/net/socket/unix/stream/mod.rs +++ b/kernel/src/net/socket/unix/stream/mod.rs @@ -332,6 +332,28 @@ impl Socket for StreamSocket { return Ok(()); } // TODO: 释放INODE_MAP相关资源 + match self.get_name()? { + Endpoint::Unixpath((inode_id, _)) => { + // 从 INODE_MAP 中移除对应的 inode + let mut inode_guard = INODE_MAP.write_irqsave(); + inode_guard.remove(&inode_id); + } + Endpoint::Abspath((abshandle, _)) => { + // 从 ABS_INODE_MAP 中移除对应的地址 + let mut abs_inode_map = ABS_INODE_MAP.lock_irqsave(); + abs_inode_map.remove(&abshandle.name()); + } + _ => { + log::error!("Invalid endpoint in close"); + return Err(SystemError::EINVAL); + } + } + + // 重置内部状态为初始状态 + *self.inner.write() = Inner::Init(Init::new()); + + // 唤醒等待队列中的等待者,防止阻塞 + self.wait_queue.wakeup(None); // 尝试释放相关抽象地址资源 let _ = remove_abs_addr(&path);