summaryrefslogtreecommitdiff
path: root/xserver/os
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@cvs.openbsd.org>2020-01-26 13:48:57 +0000
committerMatthieu Herrb <matthieu@cvs.openbsd.org>2020-01-26 13:48:57 +0000
commit0b585b26e75f318c4a2ca0194181cefd303394c3 (patch)
tree22678ed2f03b9b1523708ae540eb797ce58eb29f /xserver/os
parent9a275cbecce88b0cbe38f434bd0e09a6632d329b (diff)
Update to xserver 1.20.7 plus 2 extra fixes from upstream. ok jsg@
Diffstat (limited to 'xserver/os')
-rw-r--r--xserver/os/inputthread.c2
-rw-r--r--xserver/os/ospoll.c24
2 files changed, 17 insertions, 9 deletions
diff --git a/xserver/os/inputthread.c b/xserver/os/inputthread.c
index 97e59d21f..e6694afda 100644
--- a/xserver/os/inputthread.c
+++ b/xserver/os/inputthread.c
@@ -318,6 +318,8 @@ InputThreadDoWork(void *arg)
sigfillset(&set);
pthread_sigmask(SIG_BLOCK, &set, NULL);
+ ddxInputThreadInit();
+
inputThreadInfo->running = TRUE;
#if defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID)
diff --git a/xserver/os/ospoll.c b/xserver/os/ospoll.c
index db9e73811..c68aabc87 100644
--- a/xserver/os/ospoll.c
+++ b/xserver/os/ospoll.c
@@ -40,6 +40,7 @@
#if !HAVE_OSPOLL && defined(HAVE_PORT_CREATE)
#include <port.h>
+#include <poll.h>
#define PORT 1
#define HAVE_OSPOLL 1
#endif
@@ -78,7 +79,6 @@ struct ospoll {
#endif
#if EPOLL || PORT
-#include <sys/epoll.h>
/* epoll-based implementation */
struct ospollfd {
@@ -468,10 +468,10 @@ epoll_mod(struct ospoll *ospoll, struct ospollfd *osfd)
{
int events = 0;
if (osfd->xevents & X_NOTIFY_READ)
- events |= EPOLLIN;
+ events |= POLLIN;
if (osfd->xevents & X_NOTIFY_WRITE)
- events |= EPOLLOUT;
- port_associate(ospool->epoll_fd, PORT_SOURCE_FD, osfd->fd, events, osfd);
+ events |= POLLOUT;
+ port_associate(ospoll->epoll_fd, PORT_SOURCE_FD, osfd->fd, events, osfd);
}
#endif
@@ -601,9 +601,14 @@ ospoll_wait(struct ospoll *ospoll, int timeout)
#define MAX_EVENTS 256
port_event_t events[MAX_EVENTS];
uint_t nget = 1;
+ timespec_t port_timeout = {
+ .tv_sec = timeout / 1000,
+ .tv_nsec = (timeout % 1000) * 1000000
+ };
nready = 0;
- if (port_getn(ospoll->epoll_fd, events, MAX_EVENTS, &nget, &timeout) == 0) {
+ if (port_getn(ospoll->epoll_fd, events, MAX_EVENTS, &nget, &port_timeout)
+ == 0) {
nready = nget;
}
for (int i = 0; i < nready; i++) {
@@ -612,17 +617,18 @@ ospoll_wait(struct ospoll *ospoll, int timeout)
uint32_t revents = ev->portev_events;
int xevents = 0;
- if (revents & EPOLLIN)
+ if (revents & POLLIN)
xevents |= X_NOTIFY_READ;
- if (revents & EPOLLOUT)
+ if (revents & POLLOUT)
xevents |= X_NOTIFY_WRITE;
- if (revents & (~(EPOLLIN|EPOLLOUT)))
+ if (revents & (~(POLLIN|POLLOUT)))
xevents |= X_NOTIFY_ERROR;
if (osfd->callback)
osfd->callback(osfd->fd, xevents, osfd->data);
- if (osfd->trigger == ospoll_trigger_level && !osfd->deleted) {
+ if (osfd->trigger == ospoll_trigger_level &&
+ !xorg_list_is_empty(&osfd->deleted)) {
epoll_mod(ospoll, osfd);
}
}