From f6898a0e45e6d4289da3a8bb80c5a477dc0c2060 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Fri, 11 Apr 2025 14:54:17 +0200 Subject: [PATCH] Pass exit status to waitpid correctly. --- src/procmgr.rs | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/procmgr.rs b/src/procmgr.rs index fbfe79fbb7..6547bb389d 100644 --- a/src/procmgr.rs +++ b/src/procmgr.rs @@ -1103,27 +1103,25 @@ impl<'a> ProcScheme<'a> { None } }; - let grim_reaper = |w_pid: ProcessId, status: WaitpidStatus| { - match status { - WaitpidStatus::Continued => { - // TODO: Handle None, i.e. restart everything until a match is found - if flags.contains(WaitFlags::WCONTINUED) { - Ready((w_pid.0, 0xffff)) - } else { - Pending - } - } - WaitpidStatus::Stopped { signal } => { - if flags.contains(WaitFlags::WUNTRACED) { - Ready((w_pid.0, 0x7f | (i32::from(signal.get()) << 8))) - } else { - Pending - } - } - WaitpidStatus::Terminated { signal, status } => { - Ready((w_pid.0, signal.map_or(0, NonZeroU8::get).into())) + let grim_reaper = |w_pid: ProcessId, status: WaitpidStatus| match status { + WaitpidStatus::Continued => { + if flags.contains(WaitFlags::WCONTINUED) { + Ready((w_pid.0, 0xffff)) + } else { + Pending } } + WaitpidStatus::Stopped { signal } => { + if flags.contains(WaitFlags::WUNTRACED) { + Ready((w_pid.0, 0x7f | (i32::from(signal.get()) << 8))) + } else { + Pending + } + } + WaitpidStatus::Terminated { signal, status } => Ready(( + w_pid.0, + i32::from(signal.map_or(0, NonZeroU8::get)) | (i32::from(status) << 8), + )), }; match target {