mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-09 02:46:47 +00:00
fix: do_signal函数在处理SIG_KILL时,有一处pcb强引用未归零的问题 (#1039)
Signed-off-by: longjin <longjin@DragonOS.org>
This commit is contained in:
parent
f5c732d8dc
commit
20c58101dd
@ -431,8 +431,6 @@ impl SignalArch for X86_64SignalArch {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let pcb = ProcessManager::current_pcb();
|
|
||||||
|
|
||||||
let mut sig_number: Signal;
|
let mut sig_number: Signal;
|
||||||
let mut info: Option<SigInfo>;
|
let mut info: Option<SigInfo>;
|
||||||
let mut sigaction: Sigaction;
|
let mut sigaction: Sigaction;
|
||||||
@ -483,9 +481,13 @@ impl SignalArch for X86_64SignalArch {
|
|||||||
//避免死锁
|
//避免死锁
|
||||||
drop(siginfo_mut_guard);
|
drop(siginfo_mut_guard);
|
||||||
drop(sig_guard);
|
drop(sig_guard);
|
||||||
|
drop(pcb);
|
||||||
|
|
||||||
// 做完上面的检查后,开中断
|
// 做完上面的检查后,开中断
|
||||||
CurrentIrqArch::interrupt_enable();
|
CurrentIrqArch::interrupt_enable();
|
||||||
|
|
||||||
|
// 注意!由于handle_signal里面可能会退出进程,
|
||||||
|
// 因此这里需要检查清楚:上面所有的锁、arc指针都被释放了。否则会产生资源泄露的问题!
|
||||||
let res: Result<i32, SystemError> =
|
let res: Result<i32, SystemError> =
|
||||||
handle_signal(sig_number, &mut sigaction, &info.unwrap(), &oldset, frame);
|
handle_signal(sig_number, &mut sigaction, &info.unwrap(), &oldset, frame);
|
||||||
if res.is_err() {
|
if res.is_err() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user