1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 06:48:12 +00:00

Kernel/ProcFS: Clean dead processes properly

Now we use WeakPtrs to break Ref-counting cycle. Also, we call the
prepare_for_deletion method to ensure deleted objects are ready for
deletion. This is necessary to ensure we don't keep dead processes,
which would become zombies.

In addition to that, add some debug prints to aid debug in the future.
This commit is contained in:
Liav A 2021-07-01 19:18:38 +03:00 committed by Andreas Kling
parent 5073bf8e75
commit 3344f91fc4
6 changed files with 103 additions and 43 deletions

View file

@ -56,9 +56,12 @@ void ProcFSComponentsRegistrar::register_new_process(Process& new_process)
void ProcFSComponentsRegistrar::unregister_process(Process& deleted_process)
{
auto process_folder = m_root_folder->process_folder_for(deleted_process);
VERIFY(process_folder);
auto process_folder = m_root_folder->process_folder_for(deleted_process).release_nonnull();
process_folder->prepare_for_deletion();
process_folder->m_list_node.remove();
dbgln_if(PROCFS_DEBUG, "ProcFSExposedFolder ref_count now: {}", process_folder->ref_count());
// Note: Let's ensure we are the last holder of the ProcFSProcessFolder object before it can be deleted for good
VERIFY(process_folder->ref_count() == 1);
}
RefPtr<ProcFS> ProcFS::create()