From 20c58101dda979c0df4ab3f76f21555464cdfeeb Mon Sep 17 00:00:00 2001 From: LoGin Date: Mon, 11 Nov 2024 11:38:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20do=5Fsignal=E5=87=BD=E6=95=B0=E5=9C=A8?= =?UTF-8?q?=E5=A4=84=E7=90=86SIG=5FKILL=E6=97=B6,=E6=9C=89=E4=B8=80?= =?UTF-8?q?=E5=A4=84pcb=E5=BC=BA=E5=BC=95=E7=94=A8=E6=9C=AA=E5=BD=92?= =?UTF-8?q?=E9=9B=B6=E7=9A=84=E9=97=AE=E9=A2=98=20(#1039)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: longjin --- kernel/src/arch/x86_64/ipc/signal.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel/src/arch/x86_64/ipc/signal.rs b/kernel/src/arch/x86_64/ipc/signal.rs index c9d0af99..5bc2db64 100644 --- a/kernel/src/arch/x86_64/ipc/signal.rs +++ b/kernel/src/arch/x86_64/ipc/signal.rs @@ -431,8 +431,6 @@ impl SignalArch for X86_64SignalArch { return; } - let pcb = ProcessManager::current_pcb(); - let mut sig_number: Signal; let mut info: Option; let mut sigaction: Sigaction; @@ -483,9 +481,13 @@ impl SignalArch for X86_64SignalArch { //避免死锁 drop(siginfo_mut_guard); drop(sig_guard); + drop(pcb); // 做完上面的检查后,开中断 CurrentIrqArch::interrupt_enable(); + + // 注意!由于handle_signal里面可能会退出进程, + // 因此这里需要检查清楚:上面所有的锁、arc指针都被释放了。否则会产生资源泄露的问题! let res: Result = handle_signal(sig_number, &mut sigaction, &info.unwrap(), &oldset, frame); if res.is_err() {