Fix sigsuspend and add it to the sigqueue test.

This commit is contained in:
4lDO2
2024-08-04 23:02:04 +02:00
parent 9701e9c544
commit 2b7a1ea94b
6 changed files with 69 additions and 24 deletions
+3 -3
View File
@@ -165,14 +165,14 @@ impl PalSignal for Sys {
fn sigtimedwait(
set: &sigset_t,
sig: Option<&mut siginfo_t>,
tp: &timespec,
tp: Option<&timespec>,
) -> Result<(), Errno> {
unsafe {
e_raw(syscall!(
RT_SIGTIMEDWAIT,
set as *const _,
sig.map_or_else(core::ptr::null_mut, |s| s as *mut _) as usize,
tp as *const _,
sig.map_or_else(core::ptr::null_mut, |s| s as *mut _),
tp.map_or_else(core::ptr::null, |t| t as *const _),
NSIG / 8
))
.map(|_| ())
+1 -1
View File
@@ -42,6 +42,6 @@ pub trait PalSignal: Pal {
fn sigtimedwait(
set: &sigset_t,
sig: Option<&mut siginfo_t>,
tp: &timespec,
tp: Option<&timespec>,
) -> Result<(), Errno>;
}
+4 -4
View File
@@ -274,14 +274,14 @@ impl PalSignal for Sys {
fn sigtimedwait(
set: &sigset_t,
info_out: Option<&mut siginfo_t>,
timeout: &timespec,
timeout: Option<&timespec>,
) -> Result<(), Errno> {
// TODO: deadline-based API
let timeout = syscall::TimeSpec {
let timeout = timeout.map(|timeout| syscall::TimeSpec {
tv_sec: timeout.tv_sec,
tv_nsec: timeout.tv_nsec as _,
};
let info = redox_rt::signal::await_signal_sync(*set, &timeout)?.into();
});
let info = redox_rt::signal::await_signal_sync(*set, timeout.as_ref())?.into();
if let Some(out) = info_out {
*out = info;
}