From 912031859463d4debf0751a6e04fdb40c8522b34 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Mon, 28 Feb 2022 18:43:20 -0800 Subject: [PATCH] [kernel] Change thread_sleep arg from time to duration It seems more common to want to sleep for a duration than to sleep to a specific time. Change the implementation to not make the process look up the current time first. (Plus, there's no current syscall to do so) --- definitions/objects/thread.def | 2 +- src/kernel/syscalls/thread.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/definitions/objects/thread.def b/definitions/objects/thread.def index 4e30a60..8ac3c8c 100644 --- a/definitions/objects/thread.def +++ b/definitions/objects/thread.def @@ -18,6 +18,6 @@ object thread : object { } method sleep [static] { - param until uint64 + param duration uint64 } } diff --git a/src/kernel/syscalls/thread.cpp b/src/kernel/syscalls/thread.cpp index 0d3c01e..22349c4 100644 --- a/src/kernel/syscalls/thread.cpp +++ b/src/kernel/syscalls/thread.cpp @@ -1,6 +1,7 @@ #include #include +#include "clock.h" #include "logger.h" #include "objects/process.h" #include "objects/thread.h" @@ -47,11 +48,13 @@ thread_kill(thread *self) } j6_status_t -thread_sleep(uint64_t til) +thread_sleep(uint64_t duration) { thread &th = thread::current(); - log::debug(logs::task, "Thread %llx sleeping until %llu", th.koid(), til); + uint64_t til = clock::get().value() + duration; + + log::debug(logs::task, "Thread %llx sleeping until %llu", th.koid(), til); th.set_wake_timeout(til); th.block(); return j6_status_ok;