aboutsummaryrefslogtreecommitdiffstats
path: root/unix/xserver114.patch
blob: 2bfc8fffbe76886cbec53fc0c48208c567f5758c (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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
diff -up xserver/configure.ac.vnc xserver/configure.ac
--- xserver/configure.ac.vnc	2013-04-09 16:35:38.000000000 +0200
+++ xserver/configure.ac	2013-04-09 18:16:31.000000000 +0200
@@ -72,6 +72,7 @@ dnl forcing an entire recompile.x
 AC_CONFIG_HEADERS(include/version-config.h)
 
 AM_PROG_AS
+AC_PROG_CXX
 AC_PROG_LN_S
 AC_LIBTOOL_WIN32_DLL
 AC_DISABLE_STATIC
@@ -1573,6 +1574,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
 
@@ -1608,6 +1613,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'
@@ -1827,7 +1834,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])
@@ -2292,6 +2298,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 xserver/hw/Makefile.am.vnc xserver/hw/Makefile.am
--- xserver/hw/Makefile.am.vnc	2013-04-09 16:36:46.000000000 +0200
+++ xserver/hw/Makefile.am	2013-04-09 18:16:31.000000000 +0200
@@ -33,7 +33,8 @@ SUBDIRS =			\
 	$(XNEST_SUBDIRS)	\
 	$(DMX_SUBDIRS)		\
 	$(KDRIVE_SUBDIRS)	\
-	$(XQUARTZ_SUBDIRS)
+	$(XQUARTZ_SUBDIRS)	\
+	vnc
 
 DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive
 
diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c
--- xserver/mi/miinitext.c.vnc	2013-04-09 16:37:21.000000000 +0200
+++ xserver/mi/miinitext.c	2013-04-09 18:16:31.000000000 +0200
@@ -112,6 +112,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.
  */
@@ -238,6 +242,9 @@ EnableDisableExtensionError(const char *
 
 /* List of built-in (statically linked) extensions */
 static ExtensionModule staticExtensions[] = {
+#ifdef TIGERVNC
+    {vncExtensionInit, "VNC-EXTENSION", NULL},
+#endif
     {GEExtensionInit, "Generic Event Extension", &noGEExtension},
     {ShapeExtensionInit, "SHAPE", NULL},
 #ifdef MITSHM
diff -up xserver/os/WaitFor.c.vnc xserver/os/WaitFor.c
--- xserver/os/WaitFor.c.vnc	2013-04-10 14:51:13.000000000 +0200
+++ xserver/os/WaitFor.c	2013-04-10 14:55:40.000000000 +0200
@@ -124,6 +124,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
@@ -149,6 +152,7 @@ WaitForSomething(int *pClientsReady)
     INT32 timeout = 0;
     fd_set clientsReadable;
     fd_set clientsWritable;
+    fd_set socketsWritable;
     int curclient;
     int selecterr;
     static int nready;
@@ -207,6 +211,9 @@ WaitForSomething(int *pClientsReady)
             XFD_COPYSET(&AllSockets, &LastSelectMask);
         }
 
+        FD_ZERO(&socketsWritable);
+        vncWriteBlockHandler(&socketsWritable);
+
         BlockHandler((pointer) &wt, (pointer) &LastSelectMask);
         if (NewOutputPending)
             FlushAllOutput();
@@ -218,10 +225,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, (pointer) &LastSelectMask);
+        vncWriteWakeupHandler(i, &socketsWritable);
         if (i <= 0) {           /* An error or timeout occurred */
             if (dispatchException)
                 return 0;