aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/os
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-11-04 12:08:23 +0100
committermarha <marha@users.sourceforge.net>2013-11-04 12:08:23 +0100
commit31fd4c5654595a4763e492e4ec26f66ca3a8a405 (patch)
tree8d6b249c93725e838676e26af171a167f6f20903 /xorg-server/os
parente4ef724e06621be9325fc41ed886fd404467fdc0 (diff)
downloadvcxsrv-31fd4c5654595a4763e492e4ec26f66ca3a8a405.tar.gz
vcxsrv-31fd4c5654595a4763e492e4ec26f66ca3a8a405.tar.bz2
vcxsrv-31fd4c5654595a4763e492e4ec26f66ca3a8a405.zip
libxtrans fontconfig mesa xserver pixman xkbcomp git update 4 nov 2013
xserver commit 33c85beed521c9db140cadd8c5aa9992398ee1fe xkbcomp commit e3e6e938535532bfad175c1635256ab7fb3ac943 pixman commit 8cbc7da4e525c96a8e089e4c1baee75dc8315218 libxtrans commit 1fb0fd555a16dd8fce4abc6d3fd22b315f46762a fontconfig commit 767108aa1327cf0156dfc6f024dbc8fb783ae067 mesa commit 2f896627175384fd5943f21804700a155ba4e8a0
Diffstat (limited to 'xorg-server/os')
-rw-r--r--xorg-server/os/backtrace.c5
-rw-r--r--xorg-server/os/connection.c2
-rw-r--r--xorg-server/os/io.c29
-rw-r--r--xorg-server/os/utils.c27
-rw-r--r--xorg-server/os/xstrans.c2
5 files changed, 62 insertions, 3 deletions
diff --git a/xorg-server/os/backtrace.c b/xorg-server/os/backtrace.c
index 426f9b15b..3d1195b86 100644
--- a/xorg-server/os/backtrace.c
+++ b/xorg-server/os/backtrace.c
@@ -114,14 +114,15 @@ xorg_backtrace(void)
void
xorg_backtrace(void)
{
- void *array[64];
+ const int BT_SIZE = 64;
+ void *array[BT_SIZE];
const char *mod;
int size, i;
Dl_info info;
ErrorFSigSafe("\n");
ErrorFSigSafe("Backtrace:\n");
- size = backtrace(array, 64);
+ size = backtrace(array, BT_SIZE);
for (i = 0; i < size; i++) {
int rc = dladdr(array[i], &info);
diff --git a/xorg-server/os/connection.c b/xorg-server/os/connection.c
index 6cd8bcf43..162e1d93e 100644
--- a/xorg-server/os/connection.c
+++ b/xorg-server/os/connection.c
@@ -923,7 +923,7 @@ ErrorConnMax(XtransConnInfo trans_conn)
iov[0].iov_len = sz_xConnSetupPrefix;
iov[0].iov_base = (char *) &csp;
iov[1].iov_len = csp.lengthReason;
- iov[1].iov_base = NOROOM;
+ iov[1].iov_base = (void *) NOROOM;
iov[2].iov_len = (4 - (csp.lengthReason & 3)) & 3;
iov[2].iov_base = pad;
(void) _XSERVTransWritev(trans_conn, iov, 3);
diff --git a/xorg-server/os/io.c b/xorg-server/os/io.c
index 380036664..a20faa56f 100644
--- a/xorg-server/os/io.c
+++ b/xorg-server/os/io.c
@@ -259,6 +259,12 @@ ReadRequestFromClient(ClientPtr client)
oc->input = oci;
}
+ /* Discard any unused file descriptors */
+ while (client->req_fds > 0) {
+ int req_fd = ReadFdFromClient(client);
+ if (req_fd >= 0)
+ close(req_fd);
+ }
/* advance to start of next request */
oci->bufptr += oci->lenLastReq;
@@ -485,6 +491,29 @@ ReadRequestFromClient(ClientPtr client)
return needed;
}
+int
+ReadFdFromClient(ClientPtr client)
+{
+ int fd = -1;
+
+ if (client->req_fds > 0) {
+ OsCommPtr oc = (OsCommPtr) client->osPrivate;
+
+ --client->req_fds;
+ fd = _XSERVTransRecvFd(oc->trans_conn);
+ } else
+ LogMessage(X_ERROR, "Request asks for FD without setting req_fds\n");
+ return fd;
+}
+
+int
+WriteFdToClient(ClientPtr client, int fd, Bool do_close)
+{
+ OsCommPtr oc = (OsCommPtr) client->osPrivate;
+
+ return _XSERVTransSendFd(oc->trans_conn, fd, do_close);
+}
+
/*****************************************************************
* InsertFakeRequest
* Splice a consed up (possibly partial) request in as the next request.
diff --git a/xorg-server/os/utils.c b/xorg-server/os/utils.c
index 97c3125e6..995f62a37 100644
--- a/xorg-server/os/utils.c
+++ b/xorg-server/os/utils.c
@@ -430,6 +430,11 @@ GetTimeInMillis(void)
{
return GetTickCount();
}
+CARD64
+GetTimeInMicros(void)
+{
+ return (CARD64) GetTickCount() * 1000;
+}
#else
CARD32
GetTimeInMillis(void)
@@ -460,6 +465,28 @@ GetTimeInMillis(void)
X_GETTIMEOFDAY(&tv);
return (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
}
+
+CARD64
+GetTimeInMicros(void)
+{
+ struct timeval tv;
+#ifdef MONOTONIC_CLOCK
+ struct timespec tp;
+ static clockid_t clockid;
+
+ if (!clockid) {
+ if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
+ clockid = CLOCK_MONOTONIC;
+ else
+ clockid = ~0L;
+ }
+ if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
+ return (CARD64) tp.tv_sec * (CARD64)1000000 + tp.tv_nsec / 1000;
+#endif
+
+ X_GETTIMEOFDAY(&tv);
+ return (CARD64) tv.tv_sec * (CARD64)1000000000 + (CARD64) tv.tv_usec * 1000;
+}
#endif
void
diff --git a/xorg-server/os/xstrans.c b/xorg-server/os/xstrans.c
index 6348a6511..2bc79e7ae 100644
--- a/xorg-server/os/xstrans.c
+++ b/xorg-server/os/xstrans.c
@@ -5,9 +5,11 @@
#include <X11/Xfuncproto.h>
/* ErrorF is used by xtrans */
+#ifndef HAVE_DIX_CONFIG_H
extern _X_EXPORT void
ErrorF(const char *f, ...)
_X_ATTRIBUTE_PRINTF(1, 2);
+#endif
#define TRANS_REOPEN
#define TRANS_SERVER