Kernel: Use Process::get_thread_from_thread_list in Syscalls/thread.cpp

Some syscalls could be simplified by using the non-static method
Process::get_thread_from_thread_list which should ensure that the
specified tid is of a Thread in the same Process of the current Thread.
This commit is contained in:
Liav A 2023-09-09 18:12:49 +03:00 committed by Andrew Kaster
parent 50429d3b22
commit 3a55a1b592

View file

@ -125,10 +125,7 @@ ErrorOr<FlatPtr> Process::sys$detach_thread(pid_t tid)
{
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
TRY(require_promise(Pledge::thread));
auto thread = Thread::from_tid(tid);
if (!thread || thread->pid() != pid())
return ESRCH;
auto thread = TRY(get_thread_from_thread_list(tid));
if (!thread->is_joinable())
return EINVAL;
@ -141,10 +138,7 @@ ErrorOr<FlatPtr> Process::sys$join_thread(pid_t tid, Userspace<void**> exit_valu
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
TRY(require_promise(Pledge::thread));
auto thread = Thread::from_tid(tid);
if (!thread || thread->pid() != pid())
return ESRCH;
auto thread = TRY(get_thread_from_thread_list(tid));
auto* current_thread = Thread::current();
if (thread == current_thread)
return EDEADLK;
@ -179,10 +173,7 @@ ErrorOr<FlatPtr> Process::sys$kill_thread(pid_t tid, int signal)
if (signal < 0 || signal >= NSIG)
return EINVAL;
auto thread = Thread::from_tid(tid);
if (!thread || thread->pid() != pid())
return ESRCH;
auto thread = TRY(get_thread_from_thread_list(tid));
if (signal != 0)
thread->send_signal(signal, &Process::current());