mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-06 19:19:44 +03:00
Kernel: Defer signal handling without a register capture earlier
We were deferring the signal handling after already marking the signal as handling, which led to some failures in the Shell tests.
This commit is contained in:
parent
011bd06053
commit
853f7092f8
Notes:
sideshowbarker
2024-07-17 18:11:09 +09:00
Author: https://github.com/IdanHo Commit: https://github.com/SerenityOS/serenity/commit/853f7092f8 Pull-request: https://github.com/SerenityOS/serenity/pull/12790
@ -979,6 +979,13 @@ DispatchSignalResult Thread::dispatch_signal(u8 signal)
|
||||
// FIXME: Implement SA_SIGINFO signal handlers.
|
||||
VERIFY(!(action.flags & SA_SIGINFO));
|
||||
|
||||
if (!current_trap() && !action.handler_or_sigaction.is_null()) {
|
||||
// We're trying dispatch a handled 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;
|
||||
}
|
||||
|
||||
// Mark this signal as handled.
|
||||
m_pending_signals &= ~(1 << (signal - 1));
|
||||
m_have_any_unmasked_pending_signals.store((m_pending_signals & ~m_signal_mask) != 0, AK::memory_order_release);
|
||||
@ -1035,13 +1042,6 @@ DispatchSignalResult Thread::dispatch_signal(u8 signal)
|
||||
return DispatchSignalResult::Continue;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
u32 old_signal_mask = m_signal_mask;
|
||||
|
Loading…
Reference in New Issue
Block a user