From 7e691f96e1e1d881ea698280868be75814e7f33d Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Thu, 3 Jun 2021 03:21:04 -0700 Subject: [PATCH] Kernel: Switch ProcessGroup to IntrusiveList from InlineLinkedList --- Kernel/Process.cpp | 2 +- Kernel/ProcessGroup.cpp | 6 +++--- Kernel/ProcessGroup.h | 16 +++++++--------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index d55fbac717cc33..8e1003e9ab040a 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -62,7 +62,7 @@ UNMAP_AFTER_INIT void Process::initialize() next_pid.store(0, AK::MemoryOrder::memory_order_release); g_processes = new InlineLinkedList; - g_process_groups = new InlineLinkedList; + g_process_groups = new ProcessGroup::List(); g_hostname = new String("courage"); g_hostname_lock = new Lock; diff --git a/Kernel/ProcessGroup.cpp b/Kernel/ProcessGroup.cpp index 3a92151e518fc3..85a08aa3967b64 100644 --- a/Kernel/ProcessGroup.cpp +++ b/Kernel/ProcessGroup.cpp @@ -9,12 +9,12 @@ namespace Kernel { RecursiveSpinLock g_process_groups_lock; -InlineLinkedList* g_process_groups; +ProcessGroup::List* g_process_groups; ProcessGroup::~ProcessGroup() { ScopedSpinLock lock(g_process_groups_lock); - g_process_groups->remove(this); + g_process_groups->remove(*this); } RefPtr ProcessGroup::create(ProcessGroupID pgid) @@ -22,7 +22,7 @@ RefPtr ProcessGroup::create(ProcessGroupID pgid) auto process_group = adopt_ref_if_nonnull(new ProcessGroup(pgid)); if (process_group) { ScopedSpinLock lock(g_process_groups_lock); - g_process_groups->prepend(process_group); + g_process_groups->prepend(*process_group); } return process_group; diff --git a/Kernel/ProcessGroup.h b/Kernel/ProcessGroup.h index 8ae5f295f5bc02..0be93ff5c43f19 100644 --- a/Kernel/ProcessGroup.h +++ b/Kernel/ProcessGroup.h @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include #include @@ -17,14 +17,11 @@ namespace Kernel { class ProcessGroup : public RefCounted - , public Weakable - , public InlineLinkedListNode { + , public Weakable { AK_MAKE_NONMOVABLE(ProcessGroup); AK_MAKE_NONCOPYABLE(ProcessGroup); - friend InlineLinkedListNode; - public: ~ProcessGroup(); @@ -40,13 +37,14 @@ class ProcessGroup { } - ProcessGroup* m_prev { nullptr }; - ProcessGroup* m_next { nullptr }; - + IntrusiveListNode m_list_node; ProcessGroupID m_pgid; + +public: + using List = IntrusiveList, &ProcessGroup::m_list_node>; }; -extern InlineLinkedList* g_process_groups; +extern ProcessGroup::List* g_process_groups; extern RecursiveSpinLock g_process_groups_lock; }