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

Unbreak signal delivery to userspace again.

My my, this code is quite fickle.
Andreas Kling преди 6 години
родител
ревизия
27fded7002
променени са 1 файла, в които са добавени 4 реда и са изтрити 1 реда
  1. 4 1
      Kernel/Process.cpp

+ 4 - 1
Kernel/Process.cpp

@@ -21,7 +21,7 @@
 //#define DEBUG_IO
 //#define TASK_DEBUG
 //#define FORK_DEBUG
-//#define SIGNAL_DEBUG
+#define SIGNAL_DEBUG
 #define MAX_PROCESS_GIDS 32
 
 // FIXME: Only do a single validation for accesses that don't span multiple pages.
@@ -805,6 +805,9 @@ void Process::dispatch_signal(byte signal)
 
     m_pending_signals &= ~(1 << signal);
 
+    // FIXME: This state is such a hack. It avoids trouble if 'current' is the process receiving a signal.
+    set_state(Skip1SchedulerPass);
+
 #ifdef SIGNAL_DEBUG
     dbgprintf("signal: Okay, %s(%u) {%s} has been primed with signal handler %w:%x\n", name().characters(), pid(), toString(state()), m_tss.cs, m_tss.eip);
 #endif