Kernel: Allow any signal flags and support SA_RESETHAND
This commit is contained in:
parent
5940e912b3
commit
a51b589bc9
|
@ -2505,14 +2505,7 @@ namespace Kernel
|
||||||
*oact = m_signal_handlers[signal];
|
*oact = m_signal_handlers[signal];
|
||||||
|
|
||||||
if (act)
|
if (act)
|
||||||
{
|
|
||||||
if (act->sa_flags & ~(SA_RESTART))
|
|
||||||
{
|
|
||||||
dwarnln("TODO: sigaction({}, {H})", signal, act->sa_flags);
|
|
||||||
return BAN::Error::from_errno(ENOTSUP);
|
|
||||||
}
|
|
||||||
m_signal_handlers[signal] = *act;
|
m_signal_handlers[signal] = *act;
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -507,9 +507,16 @@ namespace Kernel
|
||||||
bool has_sa_restart;
|
bool has_sa_restart;
|
||||||
{
|
{
|
||||||
SpinLockGuard _(m_process->m_signal_lock);
|
SpinLockGuard _(m_process->m_signal_lock);
|
||||||
ASSERT(!(m_process->m_signal_handlers[signal].sa_flags & SA_SIGINFO));
|
|
||||||
signal_handler = (vaddr_t)m_process->m_signal_handlers[signal].sa_handler;
|
auto& handler = m_process->m_signal_handlers[signal];
|
||||||
has_sa_restart = !!(m_process->m_signal_handlers[signal].sa_flags & SA_RESTART);
|
|
||||||
|
ASSERT(!(handler.sa_flags & SA_SIGINFO));
|
||||||
|
|
||||||
|
signal_handler = reinterpret_cast<vaddr_t>(handler.sa_handler);
|
||||||
|
if (handler.sa_flags & SA_RESETHAND)
|
||||||
|
handler.sa_handler = SIG_DFL;
|
||||||
|
|
||||||
|
has_sa_restart = !!(handler.sa_flags & SA_RESTART);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_signal_pending_mask &= ~(1ull << signal);
|
m_signal_pending_mask &= ~(1ull << signal);
|
||||||
|
|
Loading…
Reference in New Issue