|
@@ -975,8 +975,6 @@ DispatchSignalResult Thread::dispatch_signal(u8 signal)
|
|
|
return DispatchSignalResult::Deferred;
|
|
|
}
|
|
|
|
|
|
- VERIFY(previous_mode() == PreviousMode::UserMode);
|
|
|
-
|
|
|
auto& action = m_signal_action_data[signal];
|
|
|
// FIXME: Implement SA_SIGINFO signal handlers.
|
|
|
VERIFY(!(action.flags & SA_SIGINFO));
|
|
@@ -1037,8 +1035,12 @@ DispatchSignalResult Thread::dispatch_signal(u8 signal)
|
|
|
return DispatchSignalResult::Continue;
|
|
|
}
|
|
|
|
|
|
- VERIFY(previous_mode() == PreviousMode::UserMode);
|
|
|
- VERIFY(current_trap());
|
|
|
+ if (!current_trap()) {
|
|
|
+ // We're trying dispatch a signal to a user process that was scheduled after
|
|
|
+ // a yielding/blocking kernel thread, we don't have a register capture of the
|
|
|
+ // thread, so just defer processing the signal to later.
|
|
|
+ return DispatchSignalResult::Deferred;
|
|
|
+ }
|
|
|
|
|
|
ScopedAddressSpaceSwitcher switcher(m_process);
|
|
|
|