Skip to content

Commit 64e081c

Browse files
committed
1544:[refactor] Unnecessary unsafe code
1 parent 0878add commit 64e081c

File tree

2 files changed

+13
-38
lines changed

2 files changed

+13
-38
lines changed

kernel/src/filesystem/vfs/mount.rs

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -369,18 +369,11 @@ impl MountFS {
369369
#[allow(dead_code)]
370370
#[deprecated]
371371
fn wrap(self) -> Arc<Self> {
372-
// 创建Arc指针
373-
let mount_fs: Arc<MountFS> = Arc::new(self);
374-
// 创建weak指针
375-
let weak: Weak<MountFS> = Arc::downgrade(&mount_fs);
376-
377-
// 将Arc指针转为Raw指针并对其内部的self_ref字段赋值
378-
let ptr: *mut MountFS = mount_fs.as_ref() as *const Self as *mut Self;
379-
unsafe {
380-
(*ptr).self_ref = weak;
381-
// 返回初始化好的MountFS对象
382-
return mount_fs;
383-
}
372+
Arc::new_cyclic(|weak_self| {
373+
let mut mount_fs = self;
374+
mount_fs.self_ref = weak_self.clone();
375+
mount_fs
376+
})
384377
}
385378

386379
/// @brief 获取挂载点的文件系统的root inode
@@ -438,21 +431,11 @@ impl MountFSInode {
438431
#[allow(dead_code)]
439432
#[deprecated]
440433
fn wrap(self) -> Arc<Self> {
441-
// 创建Arc指针
442-
let inode: Arc<MountFSInode> = Arc::new(self);
443-
// 创建Weak指针
444-
let weak: Weak<MountFSInode> = Arc::downgrade(&inode);
445-
// 将Arc指针转为Raw指针并对其内部的self_ref字段赋值
446-
compiler_fence(Ordering::SeqCst);
447-
let ptr: *mut MountFSInode = inode.as_ref() as *const Self as *mut Self;
448-
compiler_fence(Ordering::SeqCst);
449-
unsafe {
450-
(*ptr).self_ref = weak;
451-
compiler_fence(Ordering::SeqCst);
452-
453-
// 返回初始化好的MountFSInode对象
454-
return inode;
455-
}
434+
Arc::new_cyclic(|weak_self| {
435+
let mut inode = self;
436+
inode.self_ref = weak_self.clone();
437+
inode
438+
})
456439
}
457440

458441
/// @brief 判断当前inode是否为它所在的文件系统的root inode

kernel/src/process/kthread.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,23 +150,15 @@ pub enum KernelThreadCreateStatus {
150150
#[allow(dead_code)]
151151
impl KernelThreadCreateInfo {
152152
pub fn new(func: KernelThreadClosure, name: String) -> Arc<Self> {
153-
let result = Arc::new(Self {
153+
Arc::new_cyclic(|weak_self| Self {
154154
closure: SpinLock::new(Some(Box::new(func))),
155155
name,
156156
created: AtomicKernelThreadCreateStatus::new(KernelThreadCreateStatus::NotCreated),
157157
result_pcb: SpinLock::new(None),
158158
has_unsafe_arc_instance: AtomicBool::new(false),
159-
self_ref: Weak::new(),
159+
self_ref: weak_self.clone(),
160160
to_mark_sleep: AtomicBool::new(true),
161-
});
162-
let tmp = result.clone();
163-
unsafe {
164-
let tmp = Arc::into_raw(tmp) as *mut Self;
165-
(*tmp).self_ref = Arc::downgrade(&result);
166-
Arc::from_raw(tmp);
167-
}
168-
169-
return result;
161+
})
170162
}
171163

172164
/// 创建者调用这函数,等待创建完成后,获取创建结果

0 commit comments

Comments
 (0)