diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 1bd4e59d82..c7f2b6cb49 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -547,9 +547,7 @@ void Thread::clear_signals() m_signal_mask = 0; m_pending_signals = 0; m_have_any_unmasked_pending_signals.store(false, AK::memory_order_release); - - Span action_data(m_signal_action_data); - action_data.fill({}); + m_signal_action_data.fill({}); } // Certain exceptions, such as SIGSEGV and SIGILL, put a @@ -868,7 +866,8 @@ RefPtr Thread::clone(Process& process) if (thread_or_error.is_error()) return {}; auto& clone = thread_or_error.value(); - memcpy(clone->m_signal_action_data, m_signal_action_data, sizeof(m_signal_action_data)); + auto signal_action_data_span = m_signal_action_data.span(); + signal_action_data_span.copy_to(clone->m_signal_action_data.span()); clone->m_signal_mask = m_signal_mask; memcpy(clone->m_fpu_state, m_fpu_state, sizeof(FPUState)); clone->m_thread_specific_data = m_thread_specific_data; diff --git a/Kernel/Thread.h b/Kernel/Thread.h index bc2e622348..462a7e3dcf 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -47,6 +47,7 @@ #include #include #include +#include namespace Kernel { @@ -1239,7 +1240,7 @@ private: u32 m_kernel_stack_top { 0 }; OwnPtr m_kernel_stack_region; VirtualAddress m_thread_specific_data; - SignalActionData m_signal_action_data[32] { }; + Array m_signal_action_data; Blocker* m_blocker { nullptr }; #if LOCK_DEBUG