From 64a4f3df6978b3cf71737b897385576ee2afb4bd Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 18 May 2019 20:07:00 +0200 Subject: [PATCH] Kernel: Add a Thread::set_thread_list() helper to keep logic in one place. --- Kernel/Thread.cpp | 20 ++++++++++++-------- Kernel/Thread.h | 1 + 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 1d511b85ed..7d76c2663c 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -73,8 +73,7 @@ Thread::Thread(Process& process) if (m_process.pid() != 0) { InterruptDisabler disabler; thread_table().set(this); - g_nonrunnable_threads->prepend(this); - m_thread_list = g_nonrunnable_threads; + set_thread_list(g_nonrunnable_threads); } } @@ -545,14 +544,19 @@ bool Thread::is_thread(void* ptr) return thread_table().contains((Thread*)ptr); } -void Thread::set_state(State new_state) +void Thread::set_thread_list(InlineLinkedList* thread_list) { - m_state = new_state; - auto* new_thread_list = thread_list_for_state(new_state); - if (m_thread_list == new_thread_list) + if (m_thread_list == thread_list) return; if (m_thread_list) m_thread_list->remove(this); - new_thread_list->append(this); - m_thread_list = new_thread_list; + if (thread_list) + thread_list->append(this); + m_thread_list = thread_list; +} + +void Thread::set_state(State new_state) +{ + m_state = new_state; + set_thread_list(thread_list_for_state(new_state)); } diff --git a/Kernel/Thread.h b/Kernel/Thread.h index ecd058c2a6..11091f6d3b 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -134,6 +134,7 @@ public: Thread* m_next { nullptr }; InlineLinkedList* thread_list() { return m_thread_list; } + void set_thread_list(InlineLinkedList*); template static void for_each_in_state(State, Callback); template static void for_each_living(Callback);