Add sigprocmask

ch7-signal
liusm18 3 years ago
parent c8542d6107
commit 598d8d4538

@ -7,6 +7,8 @@ const SYSCALL_WRITE: usize = 64;
const SYSCALL_EXIT: usize = 93;
const SYSCALL_YIELD: usize = 124;
const SYSCALL_KILL: usize = 129;
const SYSCALL_SIGACTION: usize = 134;
const SYSCALL_SIGPROCMASK: usize = 135;
const SYSCALL_GET_TIME: usize = 169;
const SYSCALL_GETPID: usize = 172;
const SYSCALL_FORK: usize = 220;
@ -30,6 +32,8 @@ pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize {
SYSCALL_EXIT => sys_exit(args[0] as i32),
SYSCALL_YIELD => sys_yield(),
SYSCALL_KILL => sys_kill(args[0], args[1] as u32),
SYSCALL_SIGACTION => sys_sigation(args[0] as u32, args[1], args[2]),
SYSCALL_SIGPROCMASK => sys_sigprocmask(args[0] as u32),
SYSCALL_GET_TIME => sys_get_time(),
SYSCALL_GETPID => sys_getpid(),
SYSCALL_FORK => sys_fork(),

@ -121,3 +121,22 @@ pub fn sys_kill(pid: usize, signal: u32) -> isize {
-1
}
}
pub fn sys_sigprocmask(mask: u32) -> isize {
if let Some(task) = current_task() {
let mut inner = task.inner_exclusive_access();
let old_mask = inner.signal_mask;
if let Some(flag) = SignalFlags::from_bits(mask) {
inner.signal_mask = flag;
old_mask.bits() as isize
} else {
-1
}
} else {
-1
}
}
pub fn sys_sigation(_signal: u32, _action: usize, _old_action: usize) -> isize {
0
}

@ -30,7 +30,8 @@ pub struct TaskControlBlockInner {
pub exit_code: i32,
pub fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>,
pub signals: SignalFlags,
pub pending_signals: SignalFlags
pub pending_signals: SignalFlags,
pub signal_mask: SignalFlags
}
impl TaskControlBlockInner {
@ -93,7 +94,8 @@ impl TaskControlBlock {
Some(Arc::new(Stdout)),
],
signals: SignalFlags::empty(),
pending_signals: SignalFlags::empty()
pending_signals: SignalFlags::empty(),
signal_mask: SignalFlags::empty()
})
},
};
@ -196,7 +198,8 @@ impl TaskControlBlock {
exit_code: 0,
fd_table: new_fd_table,
signals: SignalFlags::empty(),
pending_signals: SignalFlags::empty()
pending_signals: SignalFlags::empty(),
signal_mask: SignalFlags::empty()
})
},
});

Loading…
Cancel
Save