From b7cb70859f1eea5fabcb4cf91366965ba93c09fe Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Fri, 4 Apr 2025 12:53:16 +0200 Subject: [PATCH] Implement ThreadCall::SignalThread. --- src/procmgr.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/procmgr.rs b/src/procmgr.rs index 070c979771..584e5e66db 100644 --- a/src/procmgr.rs +++ b/src/procmgr.rs @@ -771,6 +771,14 @@ impl<'a> ProcScheme<'a> { Self::on_sync_sigtctl(&mut *thr.borrow_mut()).map(|()| 0), op, )), + ThreadCall::SignalThread => { + let thr = Rc::clone(thr); + Ready(Response::new( + self.on_kill_thread(&thr, metadata[1] as u8, awoken) + .map(|()| 0), + op, + )) + } } } Handle::Proc(fd_pid) => { @@ -1361,7 +1369,7 @@ impl<'a> ProcScheme<'a> { } else { state_entry.remove(); Pending - } + }; } }; // TODO: Properly remove state @@ -1429,6 +1437,25 @@ impl<'a> ProcScheme<'a> { log::trace!("PROCESSES\n{:#?}", self.processes,); log::trace!("HANDLES\n{:#?}", self.handles,); } + pub fn on_kill_thread( + &mut self, + thread: &Rc>, + signal: u8, + awoken: &mut VecDeque, + ) -> Result<()> { + let mut killed_self = false; // TODO + let is_sigchld_to_parent = false; + let caller_pid = thread.borrow().pid; // TODO: allow this to be specified? + self.on_send_sig( + caller_pid, + KillTarget::Thread(Rc::clone(thread)), + signal, + &mut killed_self, + KillMode::Idempotent, + is_sigchld_to_parent, + awoken, + ) + } pub fn on_kill( &mut self, caller_pid: ProcessId,