mirror of
https://github.com/RGBCube/serenity
synced 2025-05-25 19:15:06 +00:00
Kernel: Preserve pending signals across execve(2)s
As required by posix. Also rename Thread::clear_signals to Thread::reset_signals_for_exec since it doesn't actually clear any pending signals, but rather does execve related signal book-keeping.
This commit is contained in:
parent
31fa3f8b1b
commit
81a76a30a1
3 changed files with 4 additions and 4 deletions
|
@ -524,7 +524,7 @@ ErrorOr<void> Process::do_exec(NonnullRefPtr<OpenFileDescription> main_program_d
|
||||||
property = {};
|
property = {};
|
||||||
|
|
||||||
auto* current_thread = Thread::current();
|
auto* current_thread = Thread::current();
|
||||||
current_thread->clear_signals();
|
current_thread->reset_signals_for_exec();
|
||||||
|
|
||||||
clear_futex_queues_on_exec();
|
clear_futex_queues_on_exec();
|
||||||
|
|
||||||
|
|
|
@ -678,11 +678,11 @@ u32 Thread::signal_mask_block(sigset_t signal_set, bool block)
|
||||||
return previous_signal_mask;
|
return previous_signal_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thread::clear_signals()
|
void Thread::reset_signals_for_exec()
|
||||||
{
|
{
|
||||||
SpinlockLocker lock(g_scheduler_lock);
|
SpinlockLocker lock(g_scheduler_lock);
|
||||||
// The signal mask is preserved across execve(2).
|
// The signal mask is preserved across execve(2).
|
||||||
m_pending_signals = 0;
|
// The pending signal set is preserved across an execve(2).
|
||||||
m_have_any_unmasked_pending_signals.store(false, AK::memory_order_release);
|
m_have_any_unmasked_pending_signals.store(false, AK::memory_order_release);
|
||||||
m_signal_action_data.fill({});
|
m_signal_action_data.fill({});
|
||||||
// A successful call to execve(2) removes any existing alternate signal stack
|
// A successful call to execve(2) removes any existing alternate signal stack
|
||||||
|
|
|
@ -1010,7 +1010,7 @@ public:
|
||||||
u32 update_signal_mask(u32 signal_mask);
|
u32 update_signal_mask(u32 signal_mask);
|
||||||
u32 signal_mask_block(sigset_t signal_set, bool block);
|
u32 signal_mask_block(sigset_t signal_set, bool block);
|
||||||
u32 signal_mask() const;
|
u32 signal_mask() const;
|
||||||
void clear_signals();
|
void reset_signals_for_exec();
|
||||||
|
|
||||||
ErrorOr<FlatPtr> peek_debug_register(u32 register_index);
|
ErrorOr<FlatPtr> peek_debug_register(u32 register_index);
|
||||||
ErrorOr<void> poke_debug_register(u32 register_index, FlatPtr data);
|
ErrorOr<void> poke_debug_register(u32 register_index, FlatPtr data);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue