diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index 83917f5faf4..a5e23c790b0 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -67,6 +67,11 @@ static u32 time_slice_for(const Thread& thread) return 10; } +timeval Scheduler::time_since_boot() +{ + return { TimeManagement::the().seconds_since_boot(), (suseconds_t)TimeManagement::the().ticks_this_second() * 1000 }; +} + Thread* g_finalizer; Thread* g_colonel; WaitQueue* g_finalizer_wait_queue; @@ -138,7 +143,7 @@ Thread::WriteBlocker::WriteBlocker(const FileDescription& description) if (description.is_socket()) { auto& socket = *description.socket(); if (socket.has_send_timeout()) { - timeval deadline = kgettimeofday(); + timeval deadline = Scheduler::time_since_boot(); deadline.tv_sec += socket.send_timeout().tv_sec; deadline.tv_usec += socket.send_timeout().tv_usec; deadline.tv_sec += (socket.send_timeout().tv_usec / 1000000) * 1; @@ -163,7 +168,7 @@ Thread::ReadBlocker::ReadBlocker(const FileDescription& description) if (description.is_socket()) { auto& socket = *description.socket(); if (socket.has_receive_timeout()) { - timeval deadline = kgettimeofday(); + timeval deadline = Scheduler::time_since_boot(); deadline.tv_sec += socket.receive_timeout().tv_sec; deadline.tv_usec += socket.receive_timeout().tv_usec; deadline.tv_sec += (socket.receive_timeout().tv_usec / 1000000) * 1; @@ -325,8 +330,7 @@ bool Scheduler::pick_next() return context_switch(*g_colonel); } - struct timeval now; - kgettimeofday(now); + auto now = time_since_boot(); auto now_sec = now.tv_sec; auto now_usec = now.tv_usec; diff --git a/Kernel/Scheduler.h b/Kernel/Scheduler.h index 0aa08732112..4f28132ba30 100644 --- a/Kernel/Scheduler.h +++ b/Kernel/Scheduler.h @@ -30,6 +30,7 @@ #include #include #include +#include namespace Kernel { @@ -51,6 +52,7 @@ public: static void initialize(); static void timer_tick(const RegisterState&); static bool pick_next(); + static timeval time_since_boot(); static void pick_next_and_switch_now(); static void switch_now(); static bool yield();