Przeglądaj źródła

fix: do_signal函数在处理SIG_KILL时,有一处pcb强引用未归零的问题 (#1039)

Signed-off-by: longjin <[email protected]>
LoGin 4 miesięcy temu
rodzic
commit
20c58101dd
1 zmienionych plików z 4 dodań i 2 usunięć
  1. 4 2
      kernel/src/arch/x86_64/ipc/signal.rs

+ 4 - 2
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<SigInfo>;
         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<i32, SystemError> =
             handle_signal(sig_number, &mut sigaction, &info.unwrap(), &oldset, frame);
         if res.is_err() {