Merge branch 'sigwaitinfo_ret' into 'master'
Return awaited signal number in sigtimedwait Closes #245 See merge request redox-os/relibc!932
This commit is contained in:
@@ -513,7 +513,6 @@ pub unsafe extern "C" fn sigtimedwait(
|
||||
Sys::sigtimedwait(unsafe { &*set }, unsafe { sig.as_mut() }, unsafe {
|
||||
tp.as_ref()
|
||||
})
|
||||
.map(|()| 0)
|
||||
.or_minus_one_errno()
|
||||
}
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ impl PalSignal for Sys {
|
||||
set: &sigset_t,
|
||||
sig: Option<&mut siginfo_t>,
|
||||
tp: Option<×pec>,
|
||||
) -> Result<()> {
|
||||
) -> Result<c_int> {
|
||||
unsafe {
|
||||
e_raw(syscall!(
|
||||
RT_SIGTIMEDWAIT,
|
||||
@@ -146,7 +146,7 @@ impl PalSignal for Sys {
|
||||
tp.map_or_else(core::ptr::null, |t| t as *const _),
|
||||
size_of::<sigset_t>()
|
||||
))
|
||||
.map(|_| ())
|
||||
.map(|s| s as c_int)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,5 +35,5 @@ pub trait PalSignal: Pal {
|
||||
set: &sigset_t,
|
||||
sig: Option<&mut siginfo_t>,
|
||||
tp: Option<×pec>,
|
||||
) -> Result<()>;
|
||||
) -> Result<c_int>;
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ impl PalSignal for Sys {
|
||||
set: &sigset_t,
|
||||
info_out: Option<&mut siginfo_t>,
|
||||
timeout: Option<×pec>,
|
||||
) -> Result<(), Errno> {
|
||||
) -> Result<c_int, Errno> {
|
||||
// TODO: deadline-based API
|
||||
let timeout = timeout.map(|timeout| syscall::TimeSpec {
|
||||
tv_sec: timeout.tv_sec,
|
||||
@@ -259,6 +259,6 @@ impl PalSignal for Sys {
|
||||
if let Some(out) = info_out {
|
||||
*out = info;
|
||||
}
|
||||
Ok(())
|
||||
Ok(info.si_signo)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,6 +100,7 @@ int main(void)
|
||||
struct timespec t = (struct timespec){.tv_sec = 1, .tv_nsec = 200000000};
|
||||
status = sigtimedwait(&set, &info, &t);
|
||||
ERROR_IF(sigtimedwait, status, == -1);
|
||||
assert(status == THE_SIG);
|
||||
validate(THE_SIG, &info);
|
||||
assert(num == 0); // ensure no signal handler ran
|
||||
|
||||
|
||||
Reference in New Issue
Block a user