From e1df05300b1079ff61cca4ed8723f1de7728d38b Mon Sep 17 00:00:00 2001 From: manojks1999 <9743manoj@gmail.com> Date: Sun, 4 Jan 2026 20:33:06 +0530 Subject: [PATCH] =?UTF-8?q?refactor(filesystem):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=B7=B2=E5=BC=83=E7=94=A8=E7=9A=84wrap=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=B9=B6=E4=BD=BF=E7=94=A8Arc::new=5Fcyclic=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除MountFS和MountFSInode中已弃用的wrap方法 - 在KernelThreadCreateInfo::new中使用Arc::new_cyclic替代手动自引用设置 Signed-off-by: manojks1999 <9743manoj@gmail.com> --- kernel/src/filesystem/vfs/mount.rs | 50 +----------------------------- kernel/src/process/kthread.rs | 14 ++------- 2 files changed, 4 insertions(+), 60 deletions(-) diff --git a/kernel/src/filesystem/vfs/mount.rs b/kernel/src/filesystem/vfs/mount.rs index ec500a2cf4..a12f94748e 100644 --- a/kernel/src/filesystem/vfs/mount.rs +++ b/kernel/src/filesystem/vfs/mount.rs @@ -1,9 +1,4 @@ -use core::{ - any::Any, - fmt::Debug, - hash::Hash, - sync::atomic::{compiler_fence, Ordering}, -}; +use core::{any::Any, fmt::Debug, hash::Hash}; use alloc::{ collections::BTreeMap, @@ -363,26 +358,6 @@ impl MountFS { self.self_mountpoint.read().as_ref().cloned() } - /// @brief 用Arc指针包裹MountFS对象。 - /// 本函数的主要功能为,初始化MountFS对象中的自引用Weak指针 - /// 本函数只应在构造器中被调用 - #[allow(dead_code)] - #[deprecated] - fn wrap(self) -> Arc { - // 创建Arc指针 - let mount_fs: Arc = Arc::new(self); - // 创建weak指针 - let weak: Weak = Arc::downgrade(&mount_fs); - - // 将Arc指针转为Raw指针并对其内部的self_ref字段赋值 - let ptr: *mut MountFS = mount_fs.as_ref() as *const Self as *mut Self; - unsafe { - (*ptr).self_ref = weak; - // 返回初始化好的MountFS对象 - return mount_fs; - } - } - /// @brief 获取挂载点的文件系统的root inode pub fn mountpoint_root_inode(&self) -> Arc { return Arc::new_cyclic(|self_ref| MountFSInode { @@ -432,29 +407,6 @@ impl Drop for MountFS { } impl MountFSInode { - /// @brief 用Arc指针包裹MountFSInode对象。 - /// 本函数的主要功能为,初始化MountFSInode对象中的自引用Weak指针 - /// 本函数只应在构造器中被调用 - #[allow(dead_code)] - #[deprecated] - fn wrap(self) -> Arc { - // 创建Arc指针 - let inode: Arc = Arc::new(self); - // 创建Weak指针 - let weak: Weak = Arc::downgrade(&inode); - // 将Arc指针转为Raw指针并对其内部的self_ref字段赋值 - compiler_fence(Ordering::SeqCst); - let ptr: *mut MountFSInode = inode.as_ref() as *const Self as *mut Self; - compiler_fence(Ordering::SeqCst); - unsafe { - (*ptr).self_ref = weak; - compiler_fence(Ordering::SeqCst); - - // 返回初始化好的MountFSInode对象 - return inode; - } - } - /// @brief 判断当前inode是否为它所在的文件系统的root inode fn is_mountpoint_root(&self) -> Result { return Ok(self.inner_inode.fs().root_inode().metadata()?.inode_id diff --git a/kernel/src/process/kthread.rs b/kernel/src/process/kthread.rs index 5aa8b80c34..556fa59fa1 100644 --- a/kernel/src/process/kthread.rs +++ b/kernel/src/process/kthread.rs @@ -150,23 +150,15 @@ pub enum KernelThreadCreateStatus { #[allow(dead_code)] impl KernelThreadCreateInfo { pub fn new(func: KernelThreadClosure, name: String) -> Arc { - let result = Arc::new(Self { + Arc::new_cyclic(|weak_self| Self { closure: SpinLock::new(Some(Box::new(func))), name, created: AtomicKernelThreadCreateStatus::new(KernelThreadCreateStatus::NotCreated), result_pcb: SpinLock::new(None), has_unsafe_arc_instance: AtomicBool::new(false), - self_ref: Weak::new(), + self_ref: weak_self.clone(), to_mark_sleep: AtomicBool::new(true), - }); - let tmp = result.clone(); - unsafe { - let tmp = Arc::into_raw(tmp) as *mut Self; - (*tmp).self_ref = Arc::downgrade(&result); - Arc::from_raw(tmp); - } - - return result; + }) } /// 创建者调用这函数,等待创建完成后,获取创建结果