mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
Kernel+LibC: Add exit_thread() syscall.
This commit is contained in:
parent
02b69cf06a
commit
d07be1087a
Notes:
sideshowbarker
2024-07-19 14:32:41 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/d07be1087a6
|
@ -2443,6 +2443,18 @@ int Process::sys$create_thread(int(*entry)(void*), void* argument)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void Process::sys$exit_thread(int code)
|
||||
{
|
||||
InterruptDisabler disabler;
|
||||
if (¤t->process().main_thread() == current) {
|
||||
sys$exit(code);
|
||||
return;
|
||||
}
|
||||
current->set_state(Thread::State::Dying);
|
||||
Scheduler::pick_next_and_switch_now();
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
int Process::sys$gettid()
|
||||
{
|
||||
return current->tid();
|
||||
|
|
|
@ -175,6 +175,7 @@ public:
|
|||
int sys$setsockopt(const Syscall::SC_setsockopt_params*);
|
||||
int sys$restore_signal_mask(dword mask);
|
||||
int sys$create_thread(int(*)(void*), void*);
|
||||
void sys$exit_thread(int code);
|
||||
int sys$rename(const char* oldpath, const char* newpath);
|
||||
int sys$systrace(pid_t);
|
||||
|
||||
|
|
|
@ -118,6 +118,11 @@ static dword handle(RegisterDump& regs, dword function, dword arg1, dword arg2,
|
|||
current->process().sys$exit((int)arg1);
|
||||
ASSERT_NOT_REACHED();
|
||||
return 0;
|
||||
case Syscall::SC_exit_thread:
|
||||
cli();
|
||||
current->process().sys$exit_thread((int)arg1);
|
||||
ASSERT_NOT_REACHED();
|
||||
break;
|
||||
case Syscall::SC_chdir:
|
||||
return current->process().sys$chdir((const char*)arg1);
|
||||
case Syscall::SC_uname:
|
||||
|
|
|
@ -100,6 +100,7 @@
|
|||
__ENUMERATE_SYSCALL(shm_close) \
|
||||
__ENUMERATE_SYSCALL(ftruncate) \
|
||||
__ENUMERATE_SYSCALL(systrace) \
|
||||
__ENUMERATE_SYSCALL(exit_thread) \
|
||||
|
||||
|
||||
namespace Syscall {
|
||||
|
|
|
@ -451,6 +451,12 @@ int create_thread(int(*entry)(void*), void* argument)
|
|||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int exit_thread(int code)
|
||||
{
|
||||
int rc = syscall(SC_exit_thread, code);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int ftruncate(int fd, off_t length)
|
||||
{
|
||||
int rc = syscall(SC_ftruncate, fd, length);
|
||||
|
|
|
@ -18,6 +18,7 @@ int systrace(pid_t);
|
|||
int gettid();
|
||||
int donate(int tid);
|
||||
int create_thread(int(*)(void*), void*);
|
||||
void exit_thread(int);
|
||||
int create_shared_buffer(pid_t peer_pid, int, void** buffer);
|
||||
void* get_shared_buffer(int shared_buffer_id);
|
||||
int release_shared_buffer(int shared_buffer_id);
|
||||
|
|
Loading…
Reference in a new issue