diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index a17f037d1..0a0856a6a 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -867,15 +867,7 @@ namespace Kernel ASSERT(this == &Process::current()); CriticalScope _; - - // FIXME: support raise with signal blocked - Thread& current = Thread::current(); - if (current.add_signal(signal)) - { - current.handle_signal(signal); - return 0; - } - + Thread::current().handle_signal(-signal); ASSERT_NOT_REACHED(); } diff --git a/kernel/kernel/Thread.cpp b/kernel/kernel/Thread.cpp index 5a2307b46..51804c3f3 100644 --- a/kernel/kernel/Thread.cpp +++ b/kernel/kernel/Thread.cpp @@ -253,13 +253,17 @@ namespace Kernel } ASSERT(signal <= _SIGMAX); } - else + else if (signal > 0) { uint64_t full_pending_mask = m_signal_pending_mask | process().m_signal_pending_mask; uint64_t mask = 1ull << signal; ASSERT(full_pending_mask & mask); ASSERT(!(m_signal_block_mask & mask)); } + else + { + signal = -signal; + } uintptr_t& return_rsp = this->return_rsp(); uintptr_t& return_rip = this->return_rip();