提交 a6b278fe 编写于 作者: L liusm18

Fix coding style & add one more test

上级 ae1a5067
......@@ -9,7 +9,6 @@ mod action;
mod task;
use crate::fs::{open_file, OpenFlags};
use crate::mm::translated_refmut;
use alloc::sync::Arc;
pub use context::TaskContext;
use lazy_static::*;
......@@ -127,7 +126,6 @@ fn call_kernel_signal_handler(signal: SignalFlags) {
}
fn call_user_signal_handler(sig: usize, signal: SignalFlags) {
let token = current_user_token();
let task = current_task().unwrap();
let mut task_inner = task.inner_exclusive_access();
......
......@@ -11,6 +11,17 @@ fn func() {
sigreturn();
}
fn func2() {
loop {
print!("");
}
}
fn func3() {
println!("interrupt");
sigreturn();
}
fn user_sig_test_failsignum() {
let mut new = SignalAction::default();
let old = SignalAction::default();
......@@ -113,6 +124,38 @@ fn kernel_sig_test_failignorekill() {
}
}
fn final_sig_test() {
let mut new = SignalAction::default();
let old = SignalAction::default();
new.handler = func2 as usize;
let mut new2 = SignalAction::default();
let old2 = SignalAction::default();
new2.handler = func3 as usize;
let pid= fork();
if pid == 0{
if sigaction(10, &new, &old) < 0 {
panic!("Sigaction failed!");
}
if sigaction(14, &new2, &old2) < 0 {
panic!("Sigaction failed!");
}
if kill(getpid() as usize, 1 << 10) < 0 {
println!("Kill failed!");
exit(-1);
}
} else {
sleep(1000);
if kill(pid as usize, 1 << 14) < 0 {
println!("Kill failed!");
exit(-1);
}
sleep(1000);
kill(pid as usize, SignalFlags::SIGKILL.bits());
}
}
fn run(f: fn()) -> bool {
let pid = fork();
......@@ -133,14 +176,15 @@ fn run(f: fn()) -> bool {
#[no_mangle]
pub fn main() -> i32 {
let tests: [(fn(), &str); 7] = [
let tests: [(fn(), &str); 8] = [
(user_sig_test_failsignum, "user_sig_test_failsignum"),
(user_sig_test_kill, "user_sig_test_kill"),
(user_sig_test_multiprocsignals, "user_sig_test_multiprocsignals"),
(user_sig_test_restore, "user_sig_test_restore"),
(kernel_sig_test_ignore, "kernel_sig_test_ignore"),
(kernel_sig_test_stop_cont, "kernel_sig_test_stop_cont"),
(kernel_sig_test_failignorekill, "kernel_sig_test_failignorekill")
(kernel_sig_test_failignorekill, "kernel_sig_test_failignorekill"),
(final_sig_test, "final_sig_test")
];
let mut fail_num = 0;
for test in tests {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册