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]