diff --git a/src/header/signal/mod.rs b/src/header/signal/mod.rs index db1f70cdf9..c2807f299e 100644 --- a/src/header/signal/mod.rs +++ b/src/header/signal/mod.rs @@ -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() } diff --git a/src/platform/linux/signal.rs b/src/platform/linux/signal.rs index cb50c126a8..ced779f512 100644 --- a/src/platform/linux/signal.rs +++ b/src/platform/linux/signal.rs @@ -137,7 +137,7 @@ impl PalSignal for Sys { set: &sigset_t, sig: Option<&mut siginfo_t>, tp: Option<×pec>, - ) -> Result<()> { + ) -> Result { 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::() )) - .map(|_| ()) + .map(|s| s as c_int) } } } diff --git a/src/platform/pal/signal.rs b/src/platform/pal/signal.rs index cf6b3989b2..747e38acb1 100644 --- a/src/platform/pal/signal.rs +++ b/src/platform/pal/signal.rs @@ -35,5 +35,5 @@ pub trait PalSignal: Pal { set: &sigset_t, sig: Option<&mut siginfo_t>, tp: Option<×pec>, - ) -> Result<()>; + ) -> Result; } diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 2854d283d9..8010d37b92 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -249,7 +249,7 @@ impl PalSignal for Sys { set: &sigset_t, info_out: Option<&mut siginfo_t>, timeout: Option<×pec>, - ) -> Result<(), Errno> { + ) -> Result { // 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) } } diff --git a/tests/sigqueue.c b/tests/sigqueue.c index 08bbebc41e..c69270f1c1 100644 --- a/tests/sigqueue.c +++ b/tests/sigqueue.c @@ -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