package: tightvncserver
severity: wishlist
tags: patch

----- Forwarded message from Truxton Fulton <[EMAIL PROTECTED]> -----

Envelope-to: [EMAIL PROTECTED]
Delivery-date: Tue, 22 Mar 2005 07:33:39 +0100
From: Truxton Fulton <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: PATCH against tightvnc-1.2.9-6 for allowing 1000 MAXCLIENTS
X-Prognosticator: 42
Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAElBMVEUSDgpyVTOTZDz
 JooRMMRkrIRJCKOHSAAACaklEQVR4nE1Twa7jIAxkpeZeU3J/GN79NeTdS2vu6Qr//6/smCT
 a0laVGOyZMYNzY02t11spWVU3d6zJvq9KMZVSFnWTuo9FnJIBpazb9rHfn1z2/VJ+PyouzyU
 x81HzPf0v4OQr+7PmcbKr3GINRLzvL+uxP2lNOUglOkr8QT89yQvWjY6KGA5vniK13oWtIhW
 mYCXbpJFzqG2ug+O+RPKDXiXgI+9eD/Is1E2qe9faQdFP7hjmL+ulOTSpIvXwsXAIX9UA9Gn
 Yj8ynqJYfaLbR39717TnxXpLD49vUXqTpdKmebRnEQauNC8fbBElYy+i2RAk24U314Trthwd
 NCEH/ON0EQKVz6KZ3fm3NXVRa09HpMFh4Yr061wRJGNTnJfrvvD0ww9ZVPMd5CDDM1/yYcB2
 QJQwlT3kykwRmyS/MRHtvOBs9BUrxLdFzjj9fbuvtYgBHIl/uwccbB57hXFTbLgoECypLEf8
 LjqaY+QmUIU78fXMKoH0CkCW1uVGx+4inda5JTJS+dTfoD+vpnuKEkfSmOgAIHZBf0y+mrip
 b340w30Yr5h8DWhtA8MdElsWvEUmHDRD5KGKdFksDZ0ykty6bAUSERODq73BiwDyA4T0SIyt
 MfENIYEIeEEB7GgCkFSm7OsHQobdbTMjMxLT+DWV2YkPEK5YjQMEvqMATQWj7FZigGaBYfQx
 AnAHWyv4QFa5PjhZx54KomccPSK2RYp4ly8PZI9vUmLS/PbRFuXZ5NWdJh2K068i9j0xtDoF
 WABjWBRWWIrA889xXqWWQ64SKJr1KothuaP4qzp5rt2sfK3CVNRvwD3ipzBvlIAzfAAAAAEl
 FTkSuQmCC
X-Spamcheck-Provider: Checked for spam by OpaL, [EMAIL PROTECTED]
X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on 
        bixbite.opal.dhs.org
X-Spam-Level: 
X-Spam-Status: No, score=0.0 required=4.0 tests=none autolearn=failed 
        version=3.0.2

Hello Ola Lundqvist,

I have been using tightvnc-1.2.8 (vncserver)
for a few years with great success.  I run a
virtual desktop, and I attach it to my work machine,
my home machine, my laptop, or where ever I am.

I am a software developer, and I need to have lots of
virtual desktops with many windows open.  tightvnc
has a limit on the number of X clients that may attach
(MAXCLIENTS is defined to 128).  I needed more than that.

I spent a good bit of time unraveling the X server
code that vnc uses, and I found that it's not just
as simple as #defining MAXCLIENTS to a larger number.
There are issues with the fd_set size and the
client id at one point is stuffed into 7 bits of 
a bitfield.

I've managed to hobble around these problems, and
now have a tightvnc X server that allows 1024 clients
(actually, MAXCLIENTS is defined to 1000 to allow some
room for other open file descriptors).

The patch against your tightvnc-1.2.9-6 is not that large.
I submit it to you for inclusion in the Debian package
because I think other Xvnc users will find it useful, and
because Debian's version of tightvnc compiles on my machine,
whereas vanilla tightvnc-1.2.9 does not.

Thanks,

-Truxton Fulton


Content-Description: tightvnc-1.2.9-6-1000maxclients.patch
diff -u -r tightvnc-1.2.9-6/Xvnc/config/cf/linux.cf 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/config/cf/linux.cf
--- tightvnc-1.2.9-6/Xvnc/config/cf/linux.cf    Sat Mar 19 22:01:47 2005
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/config/cf/linux.cf    Sun Mar 20 
02:51:29 2005
@@ -107,7 +107,7 @@
 #endif
 #else
 #define LinuxSourceDefines     -D_POSIX_SOURCE -D_XOPEN_SOURCE \
-                               -D_BSD_SOURCE -D_SVID_SOURCE -DX_LOCALE
+                               -D_BSD_SOURCE -D_SVID_SOURCE -DX_LOCALE 
-DFD_SETSIZE=2048
 #define XawI18nDefines         -DUSE_XWCHAR_STRING -DUSE_XMBTOWC
 #ifndef HasLibCrypt
 #define HasLibCrypt            NO
@@ -248,21 +248,21 @@
 #define StandardCppDefines     -traditional StandardDefines
 
 #ifdef i386Architecture
-#define OptimizedCDebugFlags   DefaultGcc2i386Opt
+#define OptimizedCDebugFlags   -O2 -ggdb
 #define LinuxMachineDefines    -D__i386__
 #define ServerOSDefines                XFree86ServerOSDefines -DDDXTIME 
-DPART_NET
 #define ServerExtraDefines     -DGCCUSESGAS XFree86ServerDefines
 #endif /* i386Architecture */
 
 #ifdef x86_64Architecture
-#define OptimizedCDebugFlags   -O2
+#define OptimizedCDebugFlags   -O2 -ggdb
 #define LinuxMachineDefines    -D__x86_64__
 #define ServerOSDefines                XFree86ServerOSDefines -DDDXTIME 
-DPART_NET
 #define ServerExtraDefines     -DGCCUSESGAS XFree86ServerDefines -D_XSERVER64
 #endif /* x86_64Architecture */
 
 #ifdef ia64Architecture
-#define OptimizedCDebugFlags   -O2
+#define OptimizedCDebugFlags   -O2 -ggdb
 #define LinuxMachineDefines    -D__ia64__
 #define ServerOSDefines                XFree86ServerOSDefines -DDDXTIME 
-DPART_NET
 #define ServerExtraDefines     -DGCCUSESGAS XFree86ServerDefines -D_XSERVER64
Only in tightvnc-1.2.9-6.1000_maxclients/Xvnc: exports
diff -u -r tightvnc-1.2.9-6/Xvnc/include/Xpoll.h 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/include/Xpoll.h
--- tightvnc-1.2.9-6/Xvnc/include/Xpoll.h       Tue Apr 30 06:07:30 2002
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/include/Xpoll.h       Sun Mar 20 
10:52:12 2005
@@ -30,6 +30,12 @@
 
 */
 
+#define XFD_SETSIZE    1024
+#define FD_SETSIZE     1024
+#define __FD_SETSIZE   1024
+
+#include <sys/select.h>
+
 #ifndef _XPOLL_H_
 #define _XPOLL_H_
 
@@ -56,7 +62,7 @@
 # endif
 #endif
 
-#define XFD_SETSIZE    256
+#define XFD_SETSIZE    1024
 #ifndef FD_SETSIZE
 #define FD_SETSIZE     XFD_SETSIZE
 #endif
@@ -83,6 +89,7 @@
 # endif
 #endif
 
+
 #if defined(hpux) && ! defined(HPUX_10) /* and perhaps old BSD ??? */
 #define Select(n,r,w,e,t) select(n,(int*)r,(int*)w,(int*)e,(struct timeval*)t)
 #else
@@ -114,11 +121,26 @@
  * macros if the system has fewer than 256 bits in the fd_set bit
  * array.
  */
+
+/* these macros assume some exact value for FD_SETSIZE -- ugh! */
+
 #define XFD_ANYSET(p) \
                ((p)->fds_bits[0] || (p)->fds_bits[1] || \
                (p)->fds_bits[2] || (p)->fds_bits[3] || \
                (p)->fds_bits[4] || (p)->fds_bits[5] || \
-               (p)->fds_bits[6] || (p)->fds_bits[7])
+               (p)->fds_bits[6] || (p)->fds_bits[7] || \
+                (p)->fds_bits[8] || (p)->fds_bits[9] || \
+               (p)->fds_bits[10] || (p)->fds_bits[11] || \
+               (p)->fds_bits[12] || (p)->fds_bits[13] || \
+               (p)->fds_bits[14] || (p)->fds_bits[15] || \
+                (p)->fds_bits[16] || (p)->fds_bits[17] || \
+               (p)->fds_bits[18] || (p)->fds_bits[19] || \
+               (p)->fds_bits[20] || (p)->fds_bits[21] || \
+               (p)->fds_bits[22] || (p)->fds_bits[23] || \
+                (p)->fds_bits[24] || (p)->fds_bits[25] || \
+               (p)->fds_bits[26] || (p)->fds_bits[27] || \
+               (p)->fds_bits[28] || (p)->fds_bits[29] || \
+               (p)->fds_bits[30] || (p)->fds_bits[31])
 
 #define XFD_COPYSET(src,dst) \
                (dst)->fds_bits[0] = (src)->fds_bits[0]; \
@@ -128,7 +150,31 @@
                (dst)->fds_bits[4] = (src)->fds_bits[4]; \
                (dst)->fds_bits[5] = (src)->fds_bits[5]; \
                (dst)->fds_bits[6] = (src)->fds_bits[6]; \
-               (dst)->fds_bits[7] = (src)->fds_bits[7];
+               (dst)->fds_bits[7] = (src)->fds_bits[7]; \
+               (dst)->fds_bits[8] = (src)->fds_bits[8]; \
+               (dst)->fds_bits[9] = (src)->fds_bits[9]; \
+               (dst)->fds_bits[10] = (src)->fds_bits[10]; \
+               (dst)->fds_bits[11] = (src)->fds_bits[11]; \
+               (dst)->fds_bits[12] = (src)->fds_bits[12]; \
+               (dst)->fds_bits[13] = (src)->fds_bits[13]; \
+               (dst)->fds_bits[14] = (src)->fds_bits[14]; \
+               (dst)->fds_bits[15] = (src)->fds_bits[15]; \
+               (dst)->fds_bits[16] = (src)->fds_bits[16]; \
+               (dst)->fds_bits[17] = (src)->fds_bits[17]; \
+               (dst)->fds_bits[18] = (src)->fds_bits[18]; \
+               (dst)->fds_bits[19] = (src)->fds_bits[19]; \
+               (dst)->fds_bits[20] = (src)->fds_bits[20]; \
+               (dst)->fds_bits[21] = (src)->fds_bits[21]; \
+               (dst)->fds_bits[22] = (src)->fds_bits[22]; \
+               (dst)->fds_bits[23] = (src)->fds_bits[23]; \
+               (dst)->fds_bits[24] = (src)->fds_bits[24]; \
+               (dst)->fds_bits[25] = (src)->fds_bits[25]; \
+               (dst)->fds_bits[26] = (src)->fds_bits[26]; \
+               (dst)->fds_bits[27] = (src)->fds_bits[27]; \
+               (dst)->fds_bits[28] = (src)->fds_bits[28]; \
+               (dst)->fds_bits[29] = (src)->fds_bits[29]; \
+               (dst)->fds_bits[30] = (src)->fds_bits[30]; \
+               (dst)->fds_bits[31] = (src)->fds_bits[31];
 
 #define XFD_ANDSET(dst,b1,b2) \
                (dst)->fds_bits[0] = ((b1)->fds_bits[0] & (b2)->fds_bits[0]); \
@@ -138,7 +184,32 @@
                (dst)->fds_bits[4] = ((b1)->fds_bits[4] & (b2)->fds_bits[4]); \
                (dst)->fds_bits[5] = ((b1)->fds_bits[5] & (b2)->fds_bits[5]); \
                (dst)->fds_bits[6] = ((b1)->fds_bits[6] & (b2)->fds_bits[6]); \
-               (dst)->fds_bits[7] = ((b1)->fds_bits[7] & (b2)->fds_bits[7]);
+               (dst)->fds_bits[7] = ((b1)->fds_bits[7] & (b2)->fds_bits[7]); \
+               (dst)->fds_bits[8] = ((b1)->fds_bits[8] & (b2)->fds_bits[8]); \
+               (dst)->fds_bits[9] = ((b1)->fds_bits[9] & (b2)->fds_bits[9]); \
+               (dst)->fds_bits[10] = ((b1)->fds_bits[10] & 
(b2)->fds_bits[10]); \
+               (dst)->fds_bits[11] = ((b1)->fds_bits[11] & 
(b2)->fds_bits[11]); \
+               (dst)->fds_bits[12] = ((b1)->fds_bits[12] & 
(b2)->fds_bits[12]); \
+               (dst)->fds_bits[13] = ((b1)->fds_bits[13] & 
(b2)->fds_bits[13]); \
+               (dst)->fds_bits[14] = ((b1)->fds_bits[14] & 
(b2)->fds_bits[14]); \
+               (dst)->fds_bits[15] = ((b1)->fds_bits[15] & 
(b2)->fds_bits[15]); \
+               (dst)->fds_bits[16] = ((b1)->fds_bits[16] & 
(b2)->fds_bits[16]); \
+               (dst)->fds_bits[17] = ((b1)->fds_bits[17] & 
(b2)->fds_bits[17]); \
+               (dst)->fds_bits[18] = ((b1)->fds_bits[18] & 
(b2)->fds_bits[18]); \
+               (dst)->fds_bits[19] = ((b1)->fds_bits[19] & 
(b2)->fds_bits[19]); \
+               (dst)->fds_bits[20] = ((b1)->fds_bits[20] & 
(b2)->fds_bits[20]); \
+               (dst)->fds_bits[21] = ((b1)->fds_bits[21] & 
(b2)->fds_bits[21]); \
+               (dst)->fds_bits[22] = ((b1)->fds_bits[22] & 
(b2)->fds_bits[22]); \
+               (dst)->fds_bits[23] = ((b1)->fds_bits[23] & 
(b2)->fds_bits[23]); \
+               (dst)->fds_bits[24] = ((b1)->fds_bits[24] & 
(b2)->fds_bits[24]); \
+               (dst)->fds_bits[25] = ((b1)->fds_bits[25] & 
(b2)->fds_bits[25]); \
+               (dst)->fds_bits[26] = ((b1)->fds_bits[26] & 
(b2)->fds_bits[26]); \
+               (dst)->fds_bits[27] = ((b1)->fds_bits[27] & 
(b2)->fds_bits[27]); \
+               (dst)->fds_bits[28] = ((b1)->fds_bits[28] & 
(b2)->fds_bits[28]); \
+               (dst)->fds_bits[29] = ((b1)->fds_bits[29] & 
(b2)->fds_bits[29]); \
+               (dst)->fds_bits[30] = ((b1)->fds_bits[30] & 
(b2)->fds_bits[30]); \
+               (dst)->fds_bits[31] = ((b1)->fds_bits[31] & (b2)->fds_bits[31]);
+
 
 #define XFD_ORSET(dst,b1,b2) \
                (dst)->fds_bits[0] = ((b1)->fds_bits[0] | (b2)->fds_bits[0]); \
@@ -148,7 +219,31 @@
                (dst)->fds_bits[4] = ((b1)->fds_bits[4] | (b2)->fds_bits[4]); \
                (dst)->fds_bits[5] = ((b1)->fds_bits[5] | (b2)->fds_bits[5]); \
                (dst)->fds_bits[6] = ((b1)->fds_bits[6] | (b2)->fds_bits[6]); \
-               (dst)->fds_bits[7] = ((b1)->fds_bits[7] | (b2)->fds_bits[7]);
+               (dst)->fds_bits[7] = ((b1)->fds_bits[7] | (b2)->fds_bits[7]); \
+               (dst)->fds_bits[8] = ((b1)->fds_bits[8] | (b2)->fds_bits[8]); \
+               (dst)->fds_bits[9] = ((b1)->fds_bits[9] | (b2)->fds_bits[9]); \
+               (dst)->fds_bits[10] = ((b1)->fds_bits[10] | 
(b2)->fds_bits[10]); \
+               (dst)->fds_bits[11] = ((b1)->fds_bits[11] | 
(b2)->fds_bits[11]); \
+               (dst)->fds_bits[12] = ((b1)->fds_bits[12] | 
(b2)->fds_bits[12]); \
+               (dst)->fds_bits[13] = ((b1)->fds_bits[13] | 
(b2)->fds_bits[13]); \
+               (dst)->fds_bits[14] = ((b1)->fds_bits[14] | 
(b2)->fds_bits[14]); \
+               (dst)->fds_bits[15] = ((b1)->fds_bits[15] | 
(b2)->fds_bits[15]); \
+               (dst)->fds_bits[16] = ((b1)->fds_bits[16] | 
(b2)->fds_bits[16]); \
+               (dst)->fds_bits[17] = ((b1)->fds_bits[17] | 
(b2)->fds_bits[17]); \
+               (dst)->fds_bits[18] = ((b1)->fds_bits[18] | 
(b2)->fds_bits[18]); \
+               (dst)->fds_bits[19] = ((b1)->fds_bits[19] | 
(b2)->fds_bits[19]); \
+               (dst)->fds_bits[20] = ((b1)->fds_bits[20] | 
(b2)->fds_bits[20]); \
+               (dst)->fds_bits[21] = ((b1)->fds_bits[21] | 
(b2)->fds_bits[21]); \
+               (dst)->fds_bits[22] = ((b1)->fds_bits[22] | 
(b2)->fds_bits[22]); \
+               (dst)->fds_bits[23] = ((b1)->fds_bits[23] | 
(b2)->fds_bits[23]); \
+               (dst)->fds_bits[24] = ((b1)->fds_bits[24] | 
(b2)->fds_bits[24]); \
+               (dst)->fds_bits[25] = ((b1)->fds_bits[25] | 
(b2)->fds_bits[25]); \
+               (dst)->fds_bits[26] = ((b1)->fds_bits[26] | 
(b2)->fds_bits[26]); \
+               (dst)->fds_bits[27] = ((b1)->fds_bits[27] | 
(b2)->fds_bits[27]); \
+               (dst)->fds_bits[28] = ((b1)->fds_bits[28] | 
(b2)->fds_bits[28]); \
+               (dst)->fds_bits[29] = ((b1)->fds_bits[29] | 
(b2)->fds_bits[29]); \
+               (dst)->fds_bits[30] = ((b1)->fds_bits[30] | 
(b2)->fds_bits[30]); \
+               (dst)->fds_bits[31] = ((b1)->fds_bits[31] | (b2)->fds_bits[31]);
 
 #define XFD_UNSET(dst,b1) \
                (dst)->fds_bits[0] &= ~((b1)->fds_bits[0]); \
@@ -158,7 +253,31 @@
                (dst)->fds_bits[4] &= ~((b1)->fds_bits[4]); \
                (dst)->fds_bits[5] &= ~((b1)->fds_bits[5]); \
                (dst)->fds_bits[6] &= ~((b1)->fds_bits[6]); \
-               (dst)->fds_bits[7] &= ~((b1)->fds_bits[7]);
+               (dst)->fds_bits[7] &= ~((b1)->fds_bits[7]); \
+               (dst)->fds_bits[8] &= ~((b1)->fds_bits[8]); \
+               (dst)->fds_bits[9] &= ~((b1)->fds_bits[9]); \
+               (dst)->fds_bits[10] &= ~((b1)->fds_bits[10]); \
+               (dst)->fds_bits[11] &= ~((b1)->fds_bits[11]); \
+               (dst)->fds_bits[12] &= ~((b1)->fds_bits[12]); \
+               (dst)->fds_bits[13] &= ~((b1)->fds_bits[13]); \
+               (dst)->fds_bits[14] &= ~((b1)->fds_bits[14]); \
+               (dst)->fds_bits[15] &= ~((b1)->fds_bits[15]); \
+               (dst)->fds_bits[16] &= ~((b1)->fds_bits[16]); \
+               (dst)->fds_bits[17] &= ~((b1)->fds_bits[17]); \
+               (dst)->fds_bits[18] &= ~((b1)->fds_bits[18]); \
+               (dst)->fds_bits[19] &= ~((b1)->fds_bits[19]); \
+               (dst)->fds_bits[20] &= ~((b1)->fds_bits[20]); \
+               (dst)->fds_bits[21] &= ~((b1)->fds_bits[21]); \
+               (dst)->fds_bits[22] &= ~((b1)->fds_bits[22]); \
+               (dst)->fds_bits[23] &= ~((b1)->fds_bits[23]); \
+               (dst)->fds_bits[24] &= ~((b1)->fds_bits[24]); \
+               (dst)->fds_bits[25] &= ~((b1)->fds_bits[25]); \
+               (dst)->fds_bits[26] &= ~((b1)->fds_bits[26]); \
+               (dst)->fds_bits[27] &= ~((b1)->fds_bits[27]); \
+               (dst)->fds_bits[28] &= ~((b1)->fds_bits[28]); \
+               (dst)->fds_bits[29] &= ~((b1)->fds_bits[29]); \
+               (dst)->fds_bits[30] &= ~((b1)->fds_bits[30]); \
+               (dst)->fds_bits[31] &= ~((b1)->fds_bits[31]);
 
 #else /* USE_POLL */
 #include <sys/poll.h>
@@ -166,7 +285,6 @@
 
 #else /* WIN32 */
 
-#define XFD_SETSIZE    256
 #ifndef FD_SETSIZE
 #define FD_SETSIZE     XFD_SETSIZE
 #endif
diff -u -r tightvnc-1.2.9-6/Xvnc/lib/font/fc/fslibos.h 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/lib/font/fc/fslibos.h
--- tightvnc-1.2.9-6/Xvnc/lib/font/fc/fslibos.h Sun Jun 11 05:00:53 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/lib/font/fc/fslibos.h Sun Mar 20 
14:49:02 2005
@@ -58,6 +58,10 @@
 #undef _POSIX_SOURCE
 #endif
 #endif
+
+#define OPEN_MAX 1024
+#define NOFILE 1024
+
 #ifndef OPEN_MAX
 #if defined(SVR4) || defined(__EMX__)
 #ifdef SCO325
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/dix/dispatch.c 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/dix/dispatch.c
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/dix/dispatch.c       Sun Jun 11 
05:00:51 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/dix/dispatch.c       
Mon Mar 21 00:59:17 2005
@@ -237,6 +237,8 @@
     if (!clientReady)
        return;
 
+    ErrorF("Xvnc: dispatch: MaxClients = %d\n", MaxClients) ;
+
     while (!dispatchException)
     {
         if (*icheck[0] != *icheck[1])
@@ -255,6 +257,12 @@
        while (!dispatchException && (--nready >= 0))
        {
            client = clients[clientReady[nready]];
+
+            /*
+            if(clientReady[nready]>128)
+              ErrorF("DEBUG: dispatch.c: checking client 
%d\n",clientReady[nready]) ;
+            */
+
            if (! client)
            {
                /* KillClient can cause this to happen */
@@ -3590,6 +3598,8 @@
     int i;
     pointer ospriv;
 {
+  /* ErrorF("dispatch.c: InitClient: client %p index=%d\n",client,i) ; */
+
     client->index = i;
     client->sequence = 0; 
     client->clientAsMask = ((Mask)i) << CLIENTOFFSET;
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/dix/events.c 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/dix/events.c
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/dix/events.c Sun Jun 11 05:00:51 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/dix/events.c Mon Mar 
21 00:58:54 2005
@@ -125,7 +125,7 @@
 static int DontPropagateRefCnts[DNPMCOUNT];
 
 #ifdef DEBUG
-static debug_events = 0;
+static debug_events = 1;
 #endif
 InputInfo inputInfo;
 
@@ -1111,9 +1111,14 @@
     int type;
 
 #ifdef DEBUG
-    if (debug_events) ErrorF(
-       "Event([%d, %d], mask=0x%x), client=%d",
-       pEvents->u.u.type, pEvents->u.u.detail, mask, client->index);
+    if (debug_events)
+      ErrorF(
+       "Event([%d, %d], mask=0x%x), client=%p (index %d)\n",
+       pEvents->u.u.type, pEvents->u.u.detail, mask, client, client->index);
+
+      if(client->index==0)
+        ErrorF("clients[0]==%p, clients[128]==%p\n",clients[0],clients[128]) ;
+        
 #endif
     if ((client) && (client != serverClient) && (!client->clientGone) &&
        ((filter == CantBeFiltered) || (mask & filter)))
@@ -1199,7 +1204,12 @@
        if (filter != CantBeFiltered &&
            !((wOtherEventMasks(pWin)|pWin->eventMask) & filter))
            return 0;
-       if ( (attempt = TryClientEvents(wClient(pWin), pEvents, count,
+
+        client=wClient(pWin) ;
+        if(client && (client->index==0))
+          ErrorF("DeliverEventsToWindow: client index is zero for PWin 
%p\n",pWin) ;
+
+       if ( (attempt = TryClientEvents(client, pEvents, count,
                                      pWin->eventMask, filter, grab)) )
        {
            if (attempt > 0)
@@ -1286,13 +1296,19 @@
     Mask filter;
     ClientPtr dontClient;
 {
+    ClientPtr client;
     register OtherClients *other;
 
     if (pWin->eventMask & filter)
     {
-        if (wClient(pWin) == dontClient)
+      client=wClient(pWin) ;
+
+      if(client && (client->index==0))
+        ErrorF("MaybeDeliverEventsToWindow (1): client index is zero for PWin 
%p\n",pWin) ;
+
+        if (client == dontClient)
            return 0;
-       return TryClientEvents(wClient(pWin), pEvents, count,
+       return TryClientEvents(client, pEvents, count,
                               pWin->eventMask, filter, NullGrab);
     }
     for (other = wOtherClients(pWin); other; other = other->next)
@@ -1301,7 +1317,10 @@
        {
             if (SameClient(other, dontClient))
                return 0;
-           return TryClientEvents(rClient(other), pEvents, count,
+            client=rClient(other) ;
+            if(client && (client->index==0))
+              ErrorF("MaybeDeliverEventsToWindow (2): client index is zero for 
PWin %p\n",pWin) ;
+           return TryClientEvents(client, pEvents, count,
                                   other->mask, filter, NullGrab);
        }
     }
@@ -2511,8 +2530,13 @@
            (void)TryClientEvents(rClient(grab), &event, 1, mask,
                                  filters[type], grab);
        else
+          {
+            /*  for > 128 clients, we get this far...
+            ErrorF("EnterLeaveEvent: calling DeliverEventsToWindow for window 
%p (type %d)\n",pWin,type) ;
+            */
            (void)DeliverEventsToWindow(pWin, &event, 1, filters[type],
                                        NullGrab, 0);
+          }
     }
     if ((type == EnterNotify) && (mask & KeymapStateMask))
     {
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/include/misc.h 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/include/misc.h
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/include/misc.h       Sun Jun 11 
05:00:52 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/include/misc.h       
Sun Mar 20 10:25:56 2005
@@ -94,7 +94,7 @@
 #ifndef MAXSCREENS
 #define MAXSCREENS     3
 #endif
-#define MAXCLIENTS     128
+#define MAXCLIENTS     1000
 #define MAXDITS                1
 #define MAXEXTENSIONS  128
 #define MAXFORMATS     8
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/include/resource.h 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/include/resource.h
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/include/resource.h   Sun Jun 11 
05:00:52 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/include/resource.h   
Mon Mar 21 00:46:57 2005
@@ -56,6 +56,9 @@
 
 /* classes for Resource routines */
 
+/* dang blasted bitfield is too big to fit into 32 bits anymore.
+   who designed this? */
+
 typedef unsigned long RESTYPE;
 
 #define RC_VANILLA     ((RESTYPE)0)
@@ -84,10 +87,17 @@
 #define RT_LASTPREDEF  ((RESTYPE)9)
 #define RT_NONE                ((RESTYPE)0)
 
+/* storing a client id in only 7 bits ?! */
+
 /* bits and fields within a resource id */
-#define CLIENTOFFSET 22                                        /* client field 
*/
-#define RESOURCE_ID_MASK       0x3FFFFF                /* low 22 bits */
-#define CLIENT_BITS(id) ((id) & 0x1fc00000)            /* hi 7 bits */
+/* #define CLIENTOFFSET 22                                     /* client field 
*/
+#define CLIENTOFFSET 18                                        /* client field 
*/
+#define RESOURCE_ID_MASK       0x3FFFF                 /* low 18 bits */
+
+/* 7 bits is not enough... */
+/* #define CLIENT_BITS(id) ((id) & 0x1fc00000)         /* hi 7 bits */
+
+#define CLIENT_BITS(id) ((id) & 0x1ffc0000)            /* middle 11 bits */
 #define CLIENT_ID(id) ((int)(CLIENT_BITS(id) >> CLIENTOFFSET))
 #define SERVER_BIT             0x20000000              /* use illegal bit */
 
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/WaitFor.c 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/WaitFor.c
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/WaitFor.c Sun Jun 11 05:00:52 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/WaitFor.c Sun Mar 
20 21:25:05 2005
@@ -57,6 +57,9 @@
  *
  *****************************************************************/
 
+#define __FD_SETSIZE 1024
+#define FD_SETSIZE 1024
+
 #ifdef WIN32
 #include <X11/Xwinsock.h>
 #endif
@@ -147,7 +150,7 @@
 WaitForSomething(pClientsReady)
     int *pClientsReady;
 {
-    int i;
+    int i, maxi=0;
     struct timeval waittime, *wt;
     INT32 timeout;
 #ifdef DPMSExtension
@@ -160,6 +163,12 @@
     int nready;
     fd_set devicesReadable;
     CARD32 now;
+    
+    /*
+    ErrorF("Xvnc: WaitForSomething: 
sizeof(clientsReadable)==%d\n",sizeof(clientsReadable)) ;
+    ErrorF("Xvnc: WaitForSomething: 
sizeof(ClientsWithInput)==%d\n",sizeof(ClientsWithInput)) ;
+    ErrorF("Xvnc: WaitForSomething: MAXSOCKS == %d\n",MAXSOCKS) ;
+    */
 
     FD_ZERO(&clientsReadable);
 
@@ -315,6 +324,20 @@
        }
        XFD_COPYSET(&AllSockets, &LastSelectMask);
        BlockHandler((pointer)&wt, (pointer)&LastSelectMask);
+            /* debug */
+        if(0)
+              {
+                int ijx ;
+                ErrorF("[0] LastSelectMask = ") ;
+                for(ijx=0;ijx<32;ijx++)
+                  ErrorF("%d ",LastSelectMask.fds_bits[ijx]) ;
+                ErrorF("\n[0] ClientsWriteBlocked = ") ;
+                for(ijx=0;ijx<32;ijx++)
+                  ErrorF("%d ",ClientsWriteBlocked.fds_bits[ijx]) ;
+                ErrorF("\n") ;
+
+              }
+
        if (NewOutputPending)
            FlushAllOutput();
 #ifdef XTESTEXT1
@@ -335,7 +358,26 @@
        else
            i = Select (MAXSOCKS, &LastSelectMask, NULL, NULL, wt);
        selecterr = errno;
+
+            /* debug */
+        if(0)
+              {
+                int ijx ;
+                ErrorF("[1] LastSelectMask = ") ;
+                for(ijx=0;ijx<32;ijx++)
+                  ErrorF("%d ",LastSelectMask.fds_bits[ijx]) ;
+                ErrorF("\n[1] AllSockets = ") ;
+                for(ijx=0;ijx<32;ijx++)
+                  ErrorF("%d ",AllSockets.fds_bits[ijx]) ;
+                ErrorF("\n") ;
+                /*  not needed HACK
+                for(ijx=1;ijx<32;ijx++)
+                  LastSelectMask.fds_bits[ijx]=AllSockets.fds_bits[ijx] ;
+                */
+              }
+
        WakeupHandler(i, (pointer)&LastSelectMask);
+
 #ifdef XTESTEXT1
        if (playback_on) {
            i = XTestProcessInputAction (i, &waittime);
@@ -389,6 +431,20 @@
 
            XFD_ANDSET(&devicesReadable, &LastSelectMask, &EnabledDevices);
            XFD_ANDSET(&clientsReadable, &LastSelectMask, &AllClients); 
+
+            /* debug */
+            if(0)
+              {
+                int ijx ;
+                ErrorF("[2] LastSelectMask = ") ;
+                for(ijx=0;ijx<32;ijx++)
+                  ErrorF("%d ",LastSelectMask.fds_bits[ijx]) ;
+                ErrorF("\n[2] AllSockets = ") ;
+                for(ijx=0;ijx<32;ijx++)
+                  ErrorF("%d ",AllSockets.fds_bits[ijx]) ;
+                ErrorF("\n") ;
+              }
+
 #ifndef WIN32
            if (LastSelectMask.fds_bits[0] & WellKnownConnections.fds_bits[0]) 
 #else
@@ -410,7 +466,13 @@
     if (XFD_ANYSET (&clientsReadable))
     {
 #ifndef WIN32
-       for (i=0; i<howmany(XFD_SETSIZE, NFDBITS); i++)
+        int waitfor_howmany = howmany(XFD_SETSIZE, NFDBITS) ;
+
+        /*
+          ErrorF("Xvnc: WaitForSomething: XFD_SETSIZE=%d, NFDBITS=%d, 
howmany=%d\n", XFD_SETSIZE, NFDBITS, waitfor_howmany) ;
+        */
+
+       for (i=0; i<waitfor_howmany; i++)
        {
            int highest_priority;
 
@@ -418,6 +480,9 @@
            {
                int client_priority, client_index;
 
+                if(i>maxi)
+                  maxi=i ;
+
                curclient = ffs (clientsReadable.fds_bits[i]) - 1;
                client_index = ConnectionTranslation[curclient + (i << 5)];
 #else
@@ -441,6 +506,7 @@
                 *  aggressive clients can hose the server in so many 
                 *  other ways :)
                 */
+
                client_priority = clients[client_index]->priority;
                if (nready == 0 || client_priority > highest_priority)
                {
@@ -453,6 +519,11 @@
                    pClientsReady[0] = client_index;
                    highest_priority = client_priority;
                    nready = 1;
+
+                    /*
+                      ErrorF("Xvnc: WaitForSomething: first client is 
%d\n",client_index) ;
+                    */
+
                }
                /*  the following if makes sure that multiple same-priority 
                 *  clients get batched together
@@ -461,6 +532,9 @@
 #endif
                {
                    pClientsReady[nready++] = client_index;
+                    /*
+                    ErrorF("Xvnc: WaitForSomething: other client is 
%d\n",client_index) ;
+                    */
                }
 #ifndef WIN32
                clientsReadable.fds_bits[i] &= ~(((fd_mask)1) << curclient);
@@ -470,6 +544,11 @@
 #endif
        }
     }
+        /*
+          if(maxi>0)
+          ErrorF("Xvnc: WaitForSomething: nready=%d maxi=%d\n", nready,maxi) ;
+        */
+
     return nready;
 }
 
@@ -524,7 +603,17 @@
            FdSet clientsReadable;
            int highest_priority;
 
+            /* COPYBITS is a macro that depends on FONT_OPEN_MAX,
+               which is not apropos here
+            */
+            /*
            COPYBITS(ClientsWithInput, clientsReadable);
+            */
+            XFD_COPYSET(ClientsWithInput, clientsReadable) ;
+            /*
+              memmove((char *) clientsReadable, (char *) ClientsWithInput,
+              sizeof(ClientsWithInput)) ;
+            */
            dbprintf(("WaitFor: "));
            nready = 0;
            for (i=0; i < mskcnt; i++) {
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/connection.c 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/connection.c
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/connection.c      Wed Jan 29 
04:33:19 2003
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/connection.c      
Sun Mar 20 18:06:43 2005
@@ -283,6 +283,8 @@
     FD_ZERO(&LastSelectMask);
     FD_ZERO(&ClientsWithInput);
 
+    ErrorF("MAXSOCKS=%d\n",MAXSOCKS) ;
+
 #ifndef WIN32
     for (i=0; i<MAXSOCKS; i++) ConnectionTranslation[i] = 0;
 #else
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/io.c 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/io.c
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/io.c      Sun Jun 11 05:00:52 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/io.c      Sun Mar 
20 22:37:37 2005
@@ -55,6 +55,9 @@
  *
  *****************************************************************/
 
+#define __FD_SETSIZE 1024
+#define FD_SETSIZE 1024
+
 #ifdef WIN32
 #include <X11/Xwinsock.h>
 #endif
@@ -72,6 +75,10 @@
 #include <uio.h>
 #endif
 #endif
+
+#define __FD_SETSIZE 1024
+#define FD_SETSIZE 1024
+
 #include "X.h"
 #define NEED_REPLIES
 #include "Xproto.h"
@@ -864,6 +871,8 @@
            FD_SET(connection, &ClientsWriteBlocked);
            AnyClientsWriteBlocked = TRUE;
 
+            ErrorF("io.c: DEBUG: connection %d is WriteBlocked 
!!!\n",connection) ;
+
            if (written < oco->count)
            {
                if (written > 0)
@@ -1080,6 +1089,9 @@
 
     if (!count)
        return(0);
+
+    if(oc->fd>120)
+      ErrorF("WriteToClient: oc->fd == %d\n",oc->fd) ;
 
     if (!oco)
     {
diff -u -r tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/osdep.h 
tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/osdep.h
--- tightvnc-1.2.9-6/Xvnc/programs/Xserver/os/osdep.h   Sun Jun 11 05:00:52 2000
+++ tightvnc-1.2.9-6.1000_maxclients/Xvnc/programs/Xserver/os/osdep.h   Sun Mar 
20 10:42:47 2005
@@ -91,29 +91,33 @@
 #endif /* X_NOT_POSIX */
 #endif
 
+#if 0  /* NOFILE is incorrect, the correct value is 1024 */
 #ifndef OPEN_MAX
-#ifdef SVR4
-#define OPEN_MAX 128
-#else
-#include <sys/param.h>
-#ifndef OPEN_MAX
-#if defined(NOFILE) && !defined(NOFILES_MAX)
-#define OPEN_MAX NOFILE
-#else
-#ifndef __EMX__
-#define OPEN_MAX NOFILES_MAX
-#else
-#define OPEN_MAX 256
-#endif
-#endif
-#endif
+  #ifdef SVR4
+    #define OPEN_MAX 128
+  #else
+    #include <sys/param.h>
+    #ifndef OPEN_MAX
+      #if defined(NOFILE) && !defined(NOFILES_MAX)
+        #define OPEN_MAX NOFILE
+      #else
+        #ifndef __EMX__
+          #define OPEN_MAX NOFILES_MAX
+        #else
+          #define OPEN_MAX 256
+        #endif
+      #endif
+    #endif
+  #endif
 #endif
 #endif
 
-#if OPEN_MAX <= 128
-#define MAXSOCKS (OPEN_MAX - 1)
+#define OPEN_MAX 1024
+
+#if OPEN_MAX <= 1024
+#define MAXSOCKS (OPEN_MAX - 24)
 #else
-#define MAXSOCKS 128
+#define MAXSOCKS 1000
 #endif
 
 #ifndef NULL
diff -u -r tightvnc-1.2.9-6/vncserver tightvnc-1.2.9-6.1000_maxclients/vncserver
--- tightvnc-1.2.9-6/vncserver  Sat Mar 19 22:01:47 2005
+++ tightvnc-1.2.9-6.1000_maxclients/vncserver  Sun Mar 20 16:37:50 2005
@@ -257,6 +257,7 @@
     $cmd .= " -httpport $v";
   }
 }
+$cmd .= " -lf 1024";
 $cmd .= " -auth $xauthorityFile";
 $cmd .= " -geometry $geometry" if ($geometry);
 $cmd .= " -depth $depth" if ($depth);


----- End forwarded message -----

-- 
 --- Ola Lundqvist systemkonsult --- M Sc in IT Engineering ----
/  [EMAIL PROTECTED]                   Annebergsslingan 37        \
|  [EMAIL PROTECTED]                   654 65 KARLSTAD            |
|  http://www.opal.dhs.org           Mobile: +46 (0)70-332 1551 |
\  gpg/f.p.: 7090 A92B 18FE 7994 0C36 4FE4 18A1 B1CF 0FE5 3DD9  /
 ---------------------------------------------------------------


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to