summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/charts.c2
-rw-r--r--src/vcr.c18
2 files changed, 14 insertions, 6 deletions
diff --git a/src/charts.c b/src/charts.c
index 24ffe7d..fd66932 100644
--- a/src/charts.c
+++ b/src/charts.c
@@ -1362,7 +1362,7 @@ int vwm_charts_update(vwm_charts_t *charts, int *desired_delay_us)
}
/* TODO: make some effort to compute how long to sleep, but this is perfectly fine for now. */
- *desired_delay_us = charts->sampling_interval_secs == INFINITY ? -1 : charts->sampling_interval_secs * 300.0;
+ *desired_delay_us = charts->sampling_interval_secs == INFINITY ? -1 : charts->sampling_interval_secs * 300000.0;
return ret;
}
diff --git a/src/vcr.c b/src/vcr.c
index f97b576..10d2caf 100644
--- a/src/vcr.c
+++ b/src/vcr.c
@@ -51,6 +51,7 @@
* positions.
*/
+#define _GNU_SOURCE /* for ppoll() */
#include <assert.h>
#include <math.h>
#include <poll.h>
@@ -412,9 +413,16 @@ int vcr_backend_get_dimensions(vcr_backend_t *vbe, int *res_width, int *res_heig
/* returns 1 if the backend has events to process, 0 on timeout/error. */
int vcr_backend_poll(vcr_backend_t *vbe, int timeout_us)
{
- /* FIXME TODO: should probably switch to ppoll() and keep signals blocked outside of
- * while blocked in ppoll(). Then ppoll() becomes our signal delivery/handling point...
- */
+ struct timespec ts, *pto = NULL;
+
+ /* TODO: keep signals blocked outside of ppoll() */
+
+ if (timeout_us >= 0) {
+ ts.tv_sec = timeout_us / 10000000;
+ ts.tv_nsec = (timeout_us - (ts.tv_sec * 10000000)) * 1000;
+ pto = &ts;
+ }
+
switch (vbe->type) {
#ifdef USE_XLIB
case VCR_BACKEND_TYPE_XLIB: {
@@ -426,11 +434,11 @@ int vcr_backend_poll(vcr_backend_t *vbe, int timeout_us)
if (XPending(vbe->xlib.xserver->display))
return 1;
- return poll(&pfd, 1, timeout_us);
+ return ppoll(&pfd, 1, pto, NULL);
}
#endif
case VCR_BACKEND_TYPE_MEM:
- return poll(NULL, 0, timeout_us);
+ return ppoll(NULL, 0, pto, NULL);
default:
assert(0);
© All Rights Reserved