Fix sigsuspend and add it to the sigqueue test.
This commit is contained in:
@@ -165,14 +165,14 @@ impl PalSignal for Sys {
|
||||
fn sigtimedwait(
|
||||
set: &sigset_t,
|
||||
sig: Option<&mut siginfo_t>,
|
||||
tp: ×pec,
|
||||
tp: Option<×pec>,
|
||||
) -> 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(|_| ())
|
||||
|
||||
@@ -42,6 +42,6 @@ pub trait PalSignal: Pal {
|
||||
fn sigtimedwait(
|
||||
set: &sigset_t,
|
||||
sig: Option<&mut siginfo_t>,
|
||||
tp: ×pec,
|
||||
tp: Option<×pec>,
|
||||
) -> Result<(), Errno>;
|
||||
}
|
||||
|
||||
@@ -274,14 +274,14 @@ impl PalSignal for Sys {
|
||||
fn sigtimedwait(
|
||||
set: &sigset_t,
|
||||
info_out: Option<&mut siginfo_t>,
|
||||
timeout: ×pec,
|
||||
timeout: Option<×pec>,
|
||||
) -> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user