mirror of
https://github.com/fergalmoran/ladybird.git
synced 2025-12-25 10:48:41 +00:00
Kernel: Ensure jailed processes can be reaped by a jailed parent process
We were detaching from the jail process list too early. To ensure we detach properly, leverage the remove_from_secondary_lists method so the possibly jailed parent process can still see the dying process and therefore clean it properly.
This commit is contained in:
committed by
Jelle Raaijmakers
parent
67aceb6c67
commit
5a94e8dfd0
@@ -785,13 +785,6 @@ void Process::finalize()
|
||||
m_fds.with_exclusive([](auto& fds) { fds.clear(); });
|
||||
with_mutable_protected_data([&](auto& protected_data) { protected_data.tty = nullptr; });
|
||||
m_executable.with([](auto& executable) { executable = nullptr; });
|
||||
m_jail_process_list.with([this](auto& list_ptr) {
|
||||
if (list_ptr) {
|
||||
list_ptr->attached_processes().with([&](auto& list) {
|
||||
list.remove(*this);
|
||||
});
|
||||
}
|
||||
});
|
||||
m_attached_jail.with([](auto& jail) {
|
||||
if (jail)
|
||||
jail->detach({});
|
||||
@@ -845,6 +838,17 @@ void Process::unblock_waiters(Thread::WaitBlocker::UnblockFlags flags, u8 signal
|
||||
waiter_process->m_wait_blocker_set.unblock(*this, flags, signal);
|
||||
}
|
||||
|
||||
void Process::remove_from_secondary_lists()
|
||||
{
|
||||
m_jail_process_list.with([this](auto& list_ptr) {
|
||||
if (list_ptr) {
|
||||
list_ptr->attached_processes().with([&](auto& list) {
|
||||
list.remove(*this);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void Process::die()
|
||||
{
|
||||
auto expected = State::Running;
|
||||
|
||||
Reference in New Issue
Block a user