mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:57:35 +00:00
Kernel: Add a Thread::set_thread_list() helper to keep logic in one place.
This commit is contained in:
parent
8c7d5abdc4
commit
64a4f3df69
2 changed files with 13 additions and 8 deletions
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue