[libc-commits] [libc] 569814e - [libc] Implement pwait2 using pwait (#99781)
via libc-commits
libc-commits at lists.llvm.org
Sat Jul 20 13:27:43 PDT 2024
Author: Mikhail R. Gadelha
Date: 2024-07-20T17:27:39-03:00
New Revision: 569814e862a7ce1de3144e76d0a97253ac161d05
URL: https://github.com/llvm/llvm-project/commit/569814e862a7ce1de3144e76d0a97253ac161d05
DIFF: https://github.com/llvm/llvm-project/commit/569814e862a7ce1de3144e76d0a97253ac161d05.diff
LOG: [libc] Implement pwait2 using pwait (#99781)
This patch implements pwait2 using pwait. The implementation is an
approximation of pwait2, since pwait only only supports timeouts in
milliseconds, not nanoseconds, as required by pwait2.
Added:
Modified:
libc/src/sys/epoll/linux/epoll_pwait2.cpp
Removed:
################################################################################
diff --git a/libc/src/sys/epoll/linux/epoll_pwait2.cpp b/libc/src/sys/epoll/linux/epoll_pwait2.cpp
index 14b419399fe9b..4123157d29fff 100644
--- a/libc/src/sys/epoll/linux/epoll_pwait2.cpp
+++ b/libc/src/sys/epoll/linux/epoll_pwait2.cpp
@@ -25,10 +25,22 @@ namespace LIBC_NAMESPACE_DECL {
LLVM_LIBC_FUNCTION(int, epoll_pwait2,
(int epfd, struct epoll_event *events, int maxevents,
const struct timespec *timeout, const sigset_t *sigmask)) {
+#ifdef SYS_epoll_pwait2
int ret = LIBC_NAMESPACE::syscall_impl<int>(
SYS_epoll_pwait2, epfd, reinterpret_cast<long>(events), maxevents,
reinterpret_cast<long>(timeout), reinterpret_cast<long>(sigmask),
NSIG / 8);
+#elif defined(SYS_epoll_pwait)
+ // Convert nanoseconds to milliseconds, rounding up if there are remaining
+ // nanoseconds
+ long timeout_ms = static_cast<long>(timeout->tv_sec * 1000 +
+ (timeout->tv_nsec + 999999) / 1000000);
+ int ret = LIBC_NAMESPACE::syscall_impl<int>(
+ SYS_epoll_pwait, epfd, reinterpret_cast<long>(events), maxevents,
+ timeout_ms, reinterpret_cast<long>(sigmask), NSIG / 8);
+#else
+#error "epoll_pwait and epoll_pwait2 syscalls not available."
+#endif
// A negative return value indicates an error with the magnitude of the
// value being the error code.
More information about the libc-commits
mailing list