From 28f093e6987bd7eb631714933ae3cf1ede250380 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 28 Apr 2014 15:54:54 +0200 Subject: [PATCH] tigervnc xserver 1.14 patch --- configure.ac | 9 ++++++++- hw/Makefile.am | 3 ++- mi/miinitext.c | 7 +++++++ os/WaitFor.c | 19 ++++++++++++++++++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 0c8b516..722dbc3 100644 --- a/configure.ac +++ b/configure.ac @@ -74,6 +74,7 @@ dnl forcing an entire recompile.x AC_CONFIG_HEADERS(include/version-config.h) AM_PROG_AS +AC_PROG_CXX AC_PROG_LN_S LT_PREREQ([2.2]) LT_INIT([disable-static win32-dll]) @@ -1794,6 +1795,10 @@ if test "x$XVFB" = xyes; then AC_SUBST([XVFB_SYS_LIBS]) fi +dnl Xvnc DDX +AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"]) +AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"]) +AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"]) dnl Xnest DDX @@ -1829,6 +1834,8 @@ if test "x$XORG" = xauto; then fi AC_MSG_RESULT([$XORG]) +AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) + if test "x$XORG" = xyes; then XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' @@ -2050,7 +2057,6 @@ if test "x$XORG" = xyes; then AC_DEFINE(XORG_SERVER, 1, [Building Xorg server]) AC_DEFINE(XORGSERVER, 1, [Building Xorg server]) AC_DEFINE(XFree86Server, 1, [Building XFree86 server]) - AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs]) AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions]) AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server]) @@ -2584,6 +2590,7 @@ hw/dmx/Makefile hw/dmx/man/Makefile hw/vfb/Makefile hw/vfb/man/Makefile +hw/vnc/Makefile hw/xnest/Makefile hw/xnest/man/Makefile hw/xwin/Makefile diff --git a/hw/Makefile.am b/hw/Makefile.am index 19895dc..b42fa6e 100644 --- a/hw/Makefile.am +++ b/hw/Makefile.am @@ -38,7 +38,8 @@ SUBDIRS = \ $(DMX_SUBDIRS) \ $(KDRIVE_SUBDIRS) \ $(XQUARTZ_SUBDIRS) \ - $(XWAYLAND_SUBDIRS) + $(XWAYLAND_SUBDIRS) \ + vnc DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland diff --git a/mi/miinitext.c b/mi/miinitext.c index 1d90516..ace7dbf 100644 --- a/mi/miinitext.c +++ b/mi/miinitext.c @@ -111,6 +111,10 @@ SOFTWARE. #include "micmap.h" #include "globals.h" +#ifdef TIGERVNC +extern void vncExtensionInit(INITARGS); +#endif + /* The following is only a small first step towards run-time * configurable extensions. */ @@ -235,6 +239,9 @@ EnableDisableExtensionError(const char *name, Bool enable) /* List of built-in (statically linked) extensions */ static const ExtensionModule staticExtensions[] = { +#ifdef TIGERVNC + {vncExtensionInit, "VNC-EXTENSION", NULL}, +#endif {GEExtensionInit, "Generic Event Extension", &noGEExtension}, {ShapeExtensionInit, "SHAPE", NULL}, #ifdef MITSHM diff --git a/os/WaitFor.c b/os/WaitFor.c index 3eb15b9..9235f20 100644 --- a/os/WaitFor.c +++ b/os/WaitFor.c @@ -125,6 +125,9 @@ static void DoTimer(OsTimerPtr timer, CARD32 now, OsTimerPtr *prev); static void CheckAllTimers(void); static OsTimerPtr timers = NULL; +extern void vncWriteBlockHandler(fd_set *fds); +extern void vncWriteWakeupHandler(int nfds, fd_set *fds); + /***************** * WaitForSomething: * Make the server suspend until there is @@ -150,6 +153,7 @@ WaitForSomething(int *pClientsReady) INT32 timeout = 0; fd_set clientsReadable; fd_set clientsWritable; + fd_set socketsWritable; int curclient; int selecterr; static int nready; @@ -212,6 +216,9 @@ WaitForSomething(int *pClientsReady) XFD_COPYSET(&AllSockets, &LastSelectMask); } + FD_ZERO(&socketsWritable); + vncWriteBlockHandler(&socketsWritable); + BlockHandler((void *) &wt, (void *) &LastSelectMask); if (NewOutputPending) FlushAllOutput(); @@ -223,10 +230,20 @@ WaitForSomething(int *pClientsReady) i = Select(MaxClients, &LastSelectMask, &clientsWritable, NULL, wt); } else { - i = Select(MaxClients, &LastSelectMask, NULL, NULL, wt); + if (AnyClientsWriteBlocked) + XFD_ORSET(&socketsWritable, &ClientsWriteBlocked, &socketsWritable); + + if (XFD_ANYSET(&socketsWritable)) { + i = Select (MaxClients, &LastSelectMask, &socketsWritable, NULL, wt); + if (AnyClientsWriteBlocked) + XFD_ANDSET(&clientsWritable, &socketsWritable, &ClientsWriteBlocked); + } else { + i = Select (MaxClients, &LastSelectMask, NULL, NULL, wt); + } } selecterr = GetErrno(); WakeupHandler(i, (void *) &LastSelectMask); + vncWriteWakeupHandler(i, &socketsWritable); if (i <= 0) { /* An error or timeout occurred */ if (dispatchException) return 0; -- 1.9.0