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; + }) } /// 创建者调用这函数,等待创建完成后,获取创建结果