1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:57:45 +00:00

Kernel: Add a Thread::set_thread_list() helper to keep logic in one place.

This commit is contained in:
Andreas Kling 2019-05-18 20:07:00 +02:00
parent 8c7d5abdc4
commit 64a4f3df69
2 changed files with 13 additions and 8 deletions

View file

@ -73,8 +73,7 @@ Thread::Thread(Process& process)
if (m_process.pid() != 0) { if (m_process.pid() != 0) {
InterruptDisabler disabler; InterruptDisabler disabler;
thread_table().set(this); thread_table().set(this);
g_nonrunnable_threads->prepend(this); set_thread_list(g_nonrunnable_threads);
m_thread_list = g_nonrunnable_threads;
} }
} }
@ -545,14 +544,19 @@ bool Thread::is_thread(void* ptr)
return thread_table().contains((Thread*)ptr); return thread_table().contains((Thread*)ptr);
} }
void Thread::set_state(State new_state) void Thread::set_thread_list(InlineLinkedList<Thread>* thread_list)
{ {
m_state = new_state; if (m_thread_list == thread_list)
auto* new_thread_list = thread_list_for_state(new_state);
if (m_thread_list == new_thread_list)
return; return;
if (m_thread_list) if (m_thread_list)
m_thread_list->remove(this); m_thread_list->remove(this);
new_thread_list->append(this); if (thread_list)
m_thread_list = new_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));
} }

View file

@ -134,6 +134,7 @@ public:
Thread* m_next { nullptr }; Thread* m_next { nullptr };
InlineLinkedList<Thread>* thread_list() { return m_thread_list; } InlineLinkedList<Thread>* thread_list() { return m_thread_list; }
void set_thread_list(InlineLinkedList<Thread>*);
template<typename Callback> static void for_each_in_state(State, Callback); template<typename Callback> static void for_each_in_state(State, Callback);
template<typename Callback> static void for_each_living(Callback); template<typename Callback> static void for_each_living(Callback);