1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 11:37:34 +00:00

LibPthread+Kernel: Add pthread_kill() and the thread_kill syscall

This commit is contained in:
Ali Mohammad Pur 2021-07-09 06:26:29 +04:30 committed by Andreas Kling
parent ca71d99c66
commit e37f9fa7db
5 changed files with 70 additions and 2 deletions

View file

@ -179,7 +179,8 @@ namespace Kernel {
S(readv) \
S(emuctl) \
S(statvfs) \
S(fstatvfs)
S(fstatvfs) \
S(kill_thread)
namespace Syscall {

View file

@ -385,6 +385,7 @@ public:
KResultOr<FlatPtr> sys$detach_thread(pid_t tid);
KResultOr<FlatPtr> sys$set_thread_name(pid_t tid, Userspace<const char*> buffer, size_t buffer_size);
KResultOr<FlatPtr> sys$get_thread_name(pid_t tid, Userspace<char*> buffer, size_t buffer_size);
KResultOr<FlatPtr> sys$kill_thread(pid_t tid, int signal);
KResultOr<FlatPtr> sys$rename(Userspace<const Syscall::SC_rename_params*>);
KResultOr<FlatPtr> sys$mknod(Userspace<const Syscall::SC_mknod_params*>);
KResultOr<FlatPtr> sys$halt();

View file

@ -159,6 +159,27 @@ KResultOr<FlatPtr> Process::sys$join_thread(pid_t tid, Userspace<void**> exit_va
return 0;
}
KResultOr<FlatPtr> Process::sys$kill_thread(pid_t tid, int signal)
{
REQUIRE_PROMISE(thread);
if (signal < 0 || signal >= 32)
return EINVAL;
auto thread = Thread::from_tid(tid);
if (!thread || thread->pid() != pid())
return ESRCH;
auto process = Process::current();
if (!process)
return ESRCH;
if (signal != 0)
thread->send_signal(signal, process);
return 0;
}
KResultOr<FlatPtr> Process::sys$set_thread_name(pid_t tid, Userspace<const char*> user_name, size_t user_name_length)
{
REQUIRE_PROMISE(stdio);