Merge branch 'fix-sigalrm' into 'master'
Disable SIGARLM timer delivery See merge request redox-os/relibc!1202
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user