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]