summaryrefslogtreecommitdiff
path: root/extra/libxt/Revert_treat_unexpected_returned_events_from_poll_as_errors.diff
diff options
context:
space:
mode:
Diffstat (limited to 'extra/libxt/Revert_treat_unexpected_returned_events_from_poll_as_errors.diff')
-rw-r--r--extra/libxt/Revert_treat_unexpected_returned_events_from_poll_as_errors.diff40
1 files changed, 40 insertions, 0 deletions
diff --git a/extra/libxt/Revert_treat_unexpected_returned_events_from_poll_as_errors.diff b/extra/libxt/Revert_treat_unexpected_returned_events_from_poll_as_errors.diff
new file mode 100644
index 000000000..b3f708292
--- /dev/null
+++ b/extra/libxt/Revert_treat_unexpected_returned_events_from_poll_as_errors.diff
@@ -0,0 +1,40 @@
+From 70bb9e28d37fff4ead4d0a2c672af77059765fa4 Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Wed, 04 Jan 2012 18:33:29 +0000
+Subject: Treat unexpected returned events from poll as errors
+
+Inspired by libxcb's f0565e8f06aadf760a9065a97b8cf5ab9cbd18de
+
+Resolves https://bugs.freedesktop.org/show_bug.cgi?id=20048
+
+Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+---
+diff --git a/src/NextEvent.c b/src/NextEvent.c
+index b1f7bc7..c8c9dd5 100644
+--- a/src/NextEvent.c
++++ b/src/NextEvent.c
+@@ -356,7 +356,21 @@ static int IoWait (
+ return Select (wf->nfds, &wf->rmask, &wf->wmask, &wf->emask,
+ wt->wait_time_ptr);
+ #else
+- return poll (wf->fdlist, wf->fdlistlen, wt->poll_wait);
++ int ret = poll (wf->fdlist, wf->fdlistlen, wt->poll_wait);
++ /* If poll() returns an event we didn't expect, such as POLLNVAL, treat
++ * it as if it failed. */
++ if(ret >= 0) {
++ nfds_t i;
++ for (i=0; i < wf->fdlistlen; i++) {
++ struct pollfd *fd = &wf->fdlist[i];
++ if (fd->revents & ~fd->events) {
++ ret = -1;
++ errno = EIO;
++ break;
++ }
++ }
++ }
++ return ret;
+ #endif
+ }
+
+--
+cgit v0.9.0.2-2-gbebe