Merge branch 'fix-sigalrm' into 'master'

Disable SIGARLM timer delivery

See merge request redox-os/relibc!1202
This commit is contained in:
Jeremy Soller
2026-04-16 06:49:06 -06:00
+7 -9
View File
@@ -9,7 +9,7 @@ use crate::{
time::timer_internal_t,
},
out::Out,
platform::{Pal, PalSignal, Sys, sys::event, types::c_void},
platform::{Pal, Sys, sys::event, types::c_void},
};
use core::{
mem::{MaybeUninit, size_of},
@@ -42,14 +42,12 @@ pub extern "C" fn timer_routine(arg: *mut c_void) -> *mut c_void {
fun(timer_st.evp.sigev_value);
}
} else if timer_st.evp.sigev_notify == SIGEV_SIGNAL {
// process_pid != 0 => process-wide delivery (used by alarm())
// process_pid == 0 => thread-specific delivery (used by timer_create)
let result = if timer_st.process_pid != 0 {
Sys::kill(timer_st.process_pid, timer_st.evp.sigev_signo)
} else {
unsafe { Sys::rlct_kill(timer_st.caller_thread, timer_st.evp.sigev_signo as _) }
};
if result.is_err() {
// TODO: This will deliver signal to process, which is required for alarm()
// Until it can bypass the exec() boundary, do not uncomment this code
// if timer_st.process_pid != 0 && Sys::kill(timer_st.process_pid, timer_st.evp.sigev_signo).is_err() { break; } else
if unsafe { Sys::rlct_kill(timer_st.caller_thread, timer_st.evp.sigev_signo as _) }
.is_err()
{
break;
}
}