diff options
Diffstat (limited to 'osdep')
-rw-r--r-- | osdep/poll_wrapper.c | 11 | ||||
-rw-r--r-- | osdep/poll_wrapper.h | 5 |
2 files changed, 16 insertions, 0 deletions
diff --git a/osdep/poll_wrapper.c b/osdep/poll_wrapper.c index e4ad0f698a..48a66d2cd1 100644 --- a/osdep/poll_wrapper.c +++ b/osdep/poll_wrapper.c @@ -20,9 +20,20 @@ #include <sys/select.h> #include <stdio.h> +#include "config.h" #include "poll_wrapper.h" +#include "timer.h" +int mp_poll(struct pollfd *fds, int nfds, int64_t timeout_ns) +{ +#if HAVE_PPOLL + struct timespec ts = mp_time_ns_to_realtime(timeout_ns); + return ppoll(fds, nfds, &ts, NULL); +#endif + return poll(fds, nfds, timeout_ns / 1e6); +} + // poll shim that supports device files on macOS. int polldev(struct pollfd fds[], nfds_t nfds, int timeout) { diff --git a/osdep/poll_wrapper.h b/osdep/poll_wrapper.h index 8593c1e77c..b359ed39a0 100644 --- a/osdep/poll_wrapper.h +++ b/osdep/poll_wrapper.h @@ -1,7 +1,12 @@ #pragma once #include <poll.h> +#include <stdint.h> // Behaves like poll(3) but works for device files on macOS. // Only supports POLLIN and POLLOUT. int polldev(struct pollfd fds[], nfds_t nfds, int timeout); + +// Generic polling wrapper. It will try and use higher resolution +// polling (ppoll) if available. +int mp_poll(struct pollfd *fds, int nfds, int64_t timeout_ns); |