From 27f5c7b2e4375dacf0de548e34896d36cddb60f3 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sun, 28 Apr 2019 23:34:45 +0800 Subject: [PATCH] detach thread to auto recycle tid. fix #25 --- kernel/Cargo.lock | 2 +- kernel/src/syscall/proc.rs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index 4848e5e..74ae4b9 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -426,7 +426,7 @@ dependencies = [ [[package]] name = "rcore-thread" version = "0.1.0" -source = "git+https://github.com/rcore-os/rcore-thread#7236bfd2e2bde673773214739695bb2925a77ae5" +source = "git+https://github.com/rcore-os/rcore-thread#fd972c7e3aa2b7618f625f143655c16adfd2ca78" dependencies = [ "deque 0.3.2 (git+https://github.com/rcore-os/deque.git?branch=no_std)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index dd04326..b962d4c 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -7,7 +7,8 @@ use crate::fs::INodeExt; pub fn sys_fork(tf: &TrapFrame) -> SysResult { let new_thread = current_thread().fork(tf); let pid = new_thread.proc.lock().pid.get(); - processor().manager().add(new_thread); + let tid = processor().manager().add(new_thread); + processor().manager().detach(tid); info!("fork: {} -> {}", thread::current().id(), pid); Ok(pid) } @@ -48,6 +49,7 @@ pub fn sys_clone( let new_thread = current_thread().clone(tf, newsp, newtls, child_tid as usize); // FIXME: parent pid let tid = processor().manager().add(new_thread); + processor().manager().detach(tid); info!("clone: {} -> {}", thread::current().id(), tid); *parent_tid_ref = tid as u32; *child_tid_ref = tid as u32;