mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 12:16:31 +00:00
Signal refactor (#402)
* 初步完成对 signal_types 和 部分signal代码的初始化 * 重构了一部分架构相关代码进入 arch 中 * 基本修改完成,编译通过,后续补上系统调用 * signal基本完成,能实现 Sigaction 系统调用 * 增加了一组枚举抽象 * 进一步重构了一部分C风格的代码 * 继续重构了一部分C风格代码 * 继续完善了一部分逻辑 * 修改了部分代码逻辑 * 补充了 fork 中复制信号信息的逻辑 * 修复了 kallsysms 未转义引号的问题 * 修复了无法跳转到 sigreturn 的bug * 调通了 signal * 实现了 signal 架构抽象层的 trait * 为信号提供了默认处理函数 * 基本完成了 signal 的大体逻辑 * 修复了 Sigreturn 的一个小错误,格式化 * 修复了一个编译器漏报错误 * 删除了多余的代码 * 修改测试程序为链接 relibc * 修复了信号处理过程中浮点寄存器错误保存的问题 * 修复了一个结构体错误引起的无法在relibc下正确运行的错误 * 修复了链接 relibc 时无法正常从信号处理返回的 bug * 修复了 signal 处理流程中 rsp 指针错误导致的浮点运算触发GP * 修复了一个死锁问题,解决了默认处理函数无法进入调度导致的bug * 修复了一些错误 * 修改了 relibc 依赖版本号 * 删除了多余的 imports * 删除一些debug日志 * 删除内核 signal.h 文件 * 删除一个依赖项 * 删除了 binding 相关依赖项
This commit is contained in:
@ -58,7 +58,8 @@ struct TtyCore {
|
||||
/// 输出的mpsc队列输入输出端
|
||||
output_rx: mpsc::Receiver<u8>,
|
||||
output_tx: mpsc::Sender<u8>,
|
||||
|
||||
// 前台进程,以后改成前台进程组
|
||||
// front_job: Option<Pid>,
|
||||
/// tty核心的状态
|
||||
state: RwLock<TtyCoreState>,
|
||||
}
|
||||
@ -74,6 +75,8 @@ pub enum TtyError {
|
||||
Closed,
|
||||
/// End of file(已经读取的字符数,包含eof)
|
||||
EOF(usize),
|
||||
/// 接收到信号终止
|
||||
Stopped(usize),
|
||||
Unknown(String),
|
||||
}
|
||||
|
||||
@ -106,7 +109,6 @@ impl TtyCore {
|
||||
/// @return Ok(成功传送的字节数)
|
||||
/// @return Err(TtyError) 内部错误信息
|
||||
pub fn input(&self, buf: &[u8], block: bool) -> Result<usize, TtyError> {
|
||||
// TODO: 在这里考虑增加对信号发送的处理
|
||||
let val = self.write_stdin(buf, block)?;
|
||||
// 如果开启了输入回显,那么就写一份到输出缓冲区
|
||||
if self.echo_enabled() {
|
||||
@ -281,11 +283,24 @@ impl TtyCore {
|
||||
_ => return Err(TtyError::Unknown(format!("{e:?}"))),
|
||||
}
|
||||
} else {
|
||||
// TODO: 在这里考虑增加对信号发送的处理
|
||||
// if buf[cnt] == 3 {
|
||||
// let pid = ProcessManager::current_pcb().pid();
|
||||
// Signal::SIGKILL.send_signal_info(
|
||||
// Some(&mut SigInfo::new(
|
||||
// Signal::SIGKILL,
|
||||
// 0,
|
||||
// SigCode::SI_USER,
|
||||
// SigType::Kill(pid),
|
||||
// )),
|
||||
// pid,
|
||||
// );
|
||||
// return Err(TtyError::Stopped(cnt));
|
||||
// }
|
||||
*r.unwrap() = buf[cnt];
|
||||
cnt += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return Ok(cnt);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user