diff --git a/src/libos/src/process/mod.rs b/src/libos/src/process/mod.rs index 86c6017e..a8d32e2f 100644 --- a/src/libos/src/process/mod.rs +++ b/src/libos/src/process/mod.rs @@ -1,5 +1,5 @@ pub use self::process::{Status, IDLE_PROCESS}; -pub use self::task::{get_current, run_task}; +pub use self::task::{get_current, run_task, current_pid}; pub use self::process_table::{get}; pub use self::exit::{do_exit, do_wait4, ChildProcessFilter}; pub use self::spawn::{do_spawn, FileAction}; diff --git a/src/libos/src/process/task.rs b/src/libos/src/process/task.rs index 244c473e..89fcde6a 100644 --- a/src/libos/src/process/task.rs +++ b/src/libos/src/process/task.rs @@ -68,6 +68,12 @@ thread_local! { static _CURRENT_PROCESS_PTR: Cell<*const SgxMutex> = { Cell::new(0 as *const SgxMutex) }; + // for log getting pid without locking process + static _PID: Cell = Cell::new(0); +} + +pub fn current_pid() -> pid_t { + _PID.with(|p| p.get()) } pub fn get_current() -> ProcessRef { @@ -81,6 +87,9 @@ pub fn get_current() -> ProcessRef { } fn set_current(process: &ProcessRef) { + let pid = process.lock().unwrap().get_pid(); + _PID.with(|p| p.set(pid)); + let process_ref_clone = process.clone(); let process_ptr = Arc::into_raw(process_ref_clone); @@ -90,6 +99,7 @@ fn set_current(process: &ProcessRef) { } fn reset_current() { + _PID.with(|p| p.set(0)); let mut process_ptr = _CURRENT_PROCESS_PTR.with(|cp| cp.replace(0 as *const SgxMutex)); // Prevent memory leakage diff --git a/src/libos/src/util/log.rs b/src/libos/src/util/log.rs index 302dd3db..621db02c 100644 --- a/src/libos/src/util/log.rs +++ b/src/libos/src/util/log.rs @@ -26,7 +26,7 @@ impl Log for SimpleLogger { "\u{1B}[{}m[{:>5}][{}] {}\u{1B}[0m", color as u8, record.level(), - crate::process::do_getpid(), + crate::process::current_pid(), record.args() ); }