summaryrefslogtreecommitdiff
path: root/Kernel/Thread.cpp
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-08-16 21:52:42 +0200
committerAndreas Kling <kling@serenityos.org>2021-08-17 01:21:47 +0200
commit62719b85e0373151b8a62f53da172776d493ebed (patch)
tree0d9c78a2b3c96f178c64133ee7775ae0b0dfff1a /Kernel/Thread.cpp
parentc410f08c2b0fad3aee0ba42c05bf4c0542d4a59d (diff)
downloadserenity-62719b85e0373151b8a62f53da172776d493ebed.zip
Kernel: Port Thread to ListedRefCounted
Diffstat (limited to 'Kernel/Thread.cpp')
-rw-r--r--Kernel/Thread.cpp20
1 files changed, 3 insertions, 17 deletions
diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp
index 506675abc7..d330ddc77c 100644
--- a/Kernel/Thread.cpp
+++ b/Kernel/Thread.cpp
@@ -32,25 +32,11 @@ namespace Kernel {
static Singleton<SpinLockProtectedValue<Thread::GlobalList>> s_list;
-SpinLockProtectedValue<Thread::GlobalList>& Thread::all_threads()
+SpinLockProtectedValue<Thread::GlobalList>& Thread::all_instances()
{
return *s_list;
}
-bool Thread::unref() const
-{
- bool did_hit_zero = all_threads().with([&](auto&) {
- if (deref_base())
- return false;
- m_global_thread_list_node.remove();
- return true;
- });
-
- if (did_hit_zero)
- delete this;
- return did_hit_zero;
-}
-
KResultOr<NonnullRefPtr<Thread>> Thread::try_create(NonnullRefPtr<Process> process)
{
auto kernel_stack_region = MM.allocate_kernel_region(default_kernel_stack_size, {}, Memory::Region::Access::ReadWrite, AllocationStrategy::AllocateNow);
@@ -91,7 +77,7 @@ Thread::Thread(NonnullRefPtr<Process> process, NonnullOwnPtr<Memory::Region> ker
m_kernel_stack_region->set_name(KString::try_create(string));
}
- all_threads().with([&](auto& list) {
+ Thread::all_instances().with([&](auto& list) {
list.append(*this);
});
@@ -1258,7 +1244,7 @@ KResult Thread::make_thread_specific_region(Badge<Process>)
RefPtr<Thread> Thread::from_tid(ThreadID tid)
{
- return all_threads().with([&](auto& list) -> RefPtr<Thread> {
+ return Thread::all_instances().with([&](auto& list) -> RefPtr<Thread> {
for (Thread& thread : list) {
if (thread.tid() == tid)
return thread;