aboutsummaryrefslogtreecommitdiffstats
path: root/unix/xserver116.patch
blob: 79809f4e69b804ed23687525bf4a84f0d001adc5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
diff -up xorg-server-1.16.0/configure.ac.vnc xorg-server-1.16.0/configure.ac
--- xorg-server-1.16.0/configure.ac.vnc	2014-07-17 08:00:51.000000000 +0100
+++ xorg-server-1.16.0/configure.ac	2014-09-03 10:21:49.506109235 +0100
@@ -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])
@@ -1795,6 +1796,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 $DRI3_LIB $PRESENT_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
 
@@ -2589,6 +2595,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 -up xorg-server-1.16.0/hw/Makefile.am.vnc xorg-server-1.16.0/hw/Makefile.am
--- xorg-server-1.16.0/hw/Makefile.am.vnc	2014-04-16 21:24:00.000000000 +0100
+++ xorg-server-1.16.0/hw/Makefile.am	2014-09-03 10:21:49.507109234 +0100
@@ -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 -up xorg-server-1.16.0/mi/miinitext.c.vnc xorg-server-1.16.0/mi/miinitext.c
--- xorg-server-1.16.0/mi/miinitext.c.vnc	2014-04-16 21:24:00.000000000 +0100
+++ xorg-server-1.16.0/mi/miinitext.c	2014-09-03 10:21:49.508109234 +0100
@@ -111,6 +111,10 @@ SOFTWARE.
 #include "micmap.h"
 #include "globals.h"
 
+#ifdef TIGERVNC
+extern void vncExtensionInit(void);
+#endif
+
 /* The following is only a small first step towards run-time
  * configurable extensions.
  */
@@ -235,6 +239,9 @@ EnableDisableExtensionError(const char *
 
 /* 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 -up xorg-server-1.16.0/os/WaitFor.c.vnc xorg-server-1.16.0/os/WaitFor.c
--- xorg-server-1.16.0/os/WaitFor.c.vnc	2014-02-05 03:08:57.000000000 +0000
+++ xorg-server-1.16.0/os/WaitFor.c	2014-09-03 10:21:49.508109234 +0100
@@ -125,6 +125,9 @@ static void DoTimer(OsTimerPtr timer, CA
 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 +223,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;