Преглед на файлове

Kernel: Unblock threads only on unmasked signals

Signals that were explicitly masked should not unblock threads.
Idan Horowitz преди 3 години
родител
ревизия
1397a5ab02
променени са 1 файла, в които са добавени 3 реда и са изтрити 0 реда
  1. 3 0
      Kernel/Thread.cpp

+ 3 - 0
Kernel/Thread.cpp

@@ -638,6 +638,9 @@ void Thread::send_signal(u8 signal, [[maybe_unused]] Process* sender)
     m_pending_signals |= 1 << (signal - 1);
     m_pending_signals |= 1 << (signal - 1);
     m_have_any_unmasked_pending_signals.store((pending_signals_for_state() & ~m_signal_mask) != 0, AK::memory_order_release);
     m_have_any_unmasked_pending_signals.store((pending_signals_for_state() & ~m_signal_mask) != 0, AK::memory_order_release);
 
 
+    if (!has_unmasked_pending_signals())
+        return;
+
     if (m_state == Stopped) {
     if (m_state == Stopped) {
         SpinlockLocker lock(m_lock);
         SpinlockLocker lock(m_lock);
         if (pending_signals_for_state() != 0) {
         if (pending_signals_for_state() != 0) {