From cc465c008be450f83d454caa4b5c11e7b92e2c09 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Tue, 16 Jul 2024 19:52:18 +0200 Subject: [PATCH] Remove rustc hack. --- src/context/process.rs | 2 +- src/syscall/process.rs | 38 ++++++++++++++------------------------ 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/context/process.rs b/src/context/process.rs index a6c01efd4c..dfd4204077 100644 --- a/src/context/process.rs +++ b/src/context/process.rs @@ -70,7 +70,7 @@ impl DerefMut for Process { &mut self.info } } -#[derive(Debug)] +#[derive(Debug, Clone, Copy)] pub enum ProcessStatus { PossiblyRunnable, Stopped(usize), diff --git a/src/syscall/process.rs b/src/syscall/process.rs index c3f29b1249..23f610533f 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -505,8 +505,8 @@ pub fn waitpid( status_ptr: Option, flags: WaitFlags, ) -> Result { - let process_lock = process::current()?; let (ppid, waitpid) = { + let process_lock = process::current()?; let process = process_lock.read(); (process.pid, Arc::clone(&process.waitpid)) }; @@ -605,37 +605,27 @@ pub fn waitpid( grim_reaper(w_pid, status) } } else { - let hack_status = { - let processes = process::PROCESSES.read(); - let process_lock = processes.get(&pid).ok_or(Error::new(ECHILD))?; - let process = process_lock.read(); + let status = { + let process_lock = Arc::clone( + process::PROCESSES + .read() + .get(&pid) + .ok_or(Error::new(ESRCH))?, + ); + let process_guard = process_lock.read(); - if process.ppid != ppid { - log::info!("HACK"); + if process_guard.ppid != ppid { return Err(Error::new(ECHILD)); - // TODO - /* - println!( - "TODO: Hack for rustc - changing ppid of {} from {} to {}", - process.pid.get(), - process.ppid.get(), - ppid.get() - ); - process.ppid = ppid; - Some(context.status.clone()) - */ - } else { - None } + process_guard.status }; - if let Some(ProcessStatus::Exited(_status)) = hack_status { - /*let _ = waitpid.receive_nonblock(&WaitpidKey { + if let ProcessStatus::Exited(status) = status { + let _ = waitpid.receive_nonblock(&WaitpidKey { pid: Some(pid), pgid: None, }); - grim_reaper(pid, status)*/ - unreachable!() + grim_reaper(pid, status) } else if flags & WNOHANG == WNOHANG { let res = waitpid.receive_nonblock(&WaitpidKey { pid: Some(pid),