diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index d3dba62486..1c1235bd17 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -272,8 +272,6 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3) return virt$ioctl(arg1, arg2, arg3); case SC_get_dir_entries: return virt$get_dir_entries(arg1, arg2, arg3); - case SC_usleep: - return virt$usleep(arg1); case SC_shbuf_create: return virt$shbuf_create(arg1, arg2); case SC_shbuf_allow_pid: @@ -384,11 +382,6 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3) } } -int Emulator::virt$usleep(useconds_t us) -{ - return syscall(SC_usleep, us); -} - int Emulator::virt$shbuf_create(int size, FlatPtr buffer) { u8* host_data = nullptr; diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index 4b0ec9a94a..d36df0ef15 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -85,7 +85,6 @@ private: int virt$stat(FlatPtr); int virt$realpath(FlatPtr); int virt$gethostname(FlatPtr, ssize_t); - int virt$usleep(useconds_t); int virt$shbuf_create(int size, FlatPtr buffer); int virt$shbuf_allow_pid(int, pid_t peer_pid); int virt$shbuf_allow_all(int); diff --git a/Kernel/API/Syscall.h b/Kernel/API/Syscall.h index 684c44f2c8..936ae9b74a 100644 --- a/Kernel/API/Syscall.h +++ b/Kernel/API/Syscall.h @@ -117,7 +117,6 @@ namespace Kernel { S(poll) \ S(rmdir) \ S(chmod) \ - S(usleep) \ S(socket) \ S(bind) \ S(accept) \ @@ -241,7 +240,7 @@ struct ImmutableBufferArgument { }; struct StringListArgument { - Userspace strings { }; + Userspace strings {}; size_t length { 0 }; }; diff --git a/Kernel/Syscalls/sleep.cpp b/Kernel/Syscalls/sleep.cpp index e768ff7b22..10ddb05e05 100644 --- a/Kernel/Syscalls/sleep.cpp +++ b/Kernel/Syscalls/sleep.cpp @@ -29,17 +29,6 @@ namespace Kernel { -int Process::sys$usleep(useconds_t usec) -{ - REQUIRE_PROMISE(stdio); - if (!usec) - return 0; - u64 wakeup_time = Thread::current()->sleep(usec * TimeManagement::the().ticks_per_second() / 1000000); - if (wakeup_time > g_uptime) - return -EINTR; - return 0; -} - int Process::sys$sleep(unsigned seconds) { REQUIRE_PROMISE(stdio); diff --git a/Libraries/LibC/unistd.cpp b/Libraries/LibC/unistd.cpp index 796006a572..c7aee64815 100644 --- a/Libraries/LibC/unistd.cpp +++ b/Libraries/LibC/unistd.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include extern "C" { @@ -336,7 +337,8 @@ int sleep(unsigned seconds) int usleep(useconds_t usec) { - return syscall(SC_usleep, usec); + struct timespec ts = { (long)(usec / 1000000), (long)(usec % 1000000) * 1000 }; + return clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, nullptr); } int gethostname(char* buffer, size_t size)