diff --git a/kernel/include/kernel/Scheduler.h b/kernel/include/kernel/Scheduler.h index 42a4ffd6d..1b4a8fa68 100644 --- a/kernel/include/kernel/Scheduler.h +++ b/kernel/include/kernel/Scheduler.h @@ -31,6 +31,8 @@ namespace Kernel Thread& current_thread(); static pid_t current_tid(); + static bool is_valid_tid(pid_t tid); + private: Scheduler() = default; diff --git a/kernel/kernel/Scheduler.cpp b/kernel/kernel/Scheduler.cpp index a815fe809..a65ad08be 100644 --- a/kernel/kernel/Scheduler.cpp +++ b/kernel/kernel/Scheduler.cpp @@ -373,4 +373,26 @@ namespace Kernel } } + bool Scheduler::is_valid_tid(pid_t tid) + { + CriticalScope _; + + if (s_instance == nullptr) + return tid == 0; + + for (auto& thread : s_instance->m_active_threads) + if (thread.thread->tid() == tid) + return true; + + for (auto& thread : s_instance->m_sleeping_threads) + if (thread.thread->tid() == tid) + return true; + + for (auto& thread : s_instance->m_blocking_threads) + if (thread.thread->tid() == tid) + return true; + + return false; + } + } \ No newline at end of file