Implement basic support for (kernel) rt signals.

This commit is contained in:
4lDO2
2024-07-28 23:20:51 +02:00
parent 47e07654cb
commit 13e7b77643
10 changed files with 170 additions and 39 deletions
+16 -2
View File
@@ -1,4 +1,5 @@
use core::mem;
use crate::header::signal::sigval;
use core::{mem, ptr::addr_of};
use super::{
super::{types::*, PalSignal},
@@ -7,7 +8,7 @@ use super::{
use crate::{
error::Errno,
header::{
signal::{sigaction, siginfo_t, sigset_t, stack_t, NSIG, SA_RESTORER},
signal::{sigaction, siginfo_t, sigset_t, stack_t, NSIG, SA_RESTORER, SI_QUEUE},
sys_time::itimerval,
time::timespec,
},
@@ -21,6 +22,19 @@ impl PalSignal for Sys {
fn kill(pid: pid_t, sig: c_int) -> c_int {
e(unsafe { syscall!(KILL, pid, sig) }) as c_int
}
fn sigqueue(pid: pid_t, sig: c_int, val: sigval) -> Result<(), Errno> {
let info = siginfo_t {
si_addr: core::ptr::null_mut(),
si_code: SI_QUEUE,
si_errno: 0,
si_pid: 0, // TODO: GETPID?
si_signo: sig,
si_status: 0,
si_uid: 0, // TODO: GETUID?
si_value: val,
};
e_raw(unsafe { syscall!(RT_SIGQUEUEINFO, pid, sig, addr_of!(info)) }).map(|_| ())
}
fn killpg(pgrp: pid_t, sig: c_int) -> c_int {
e(unsafe { syscall!(KILL, -(pgrp as isize) as pid_t, sig) }) as c_int