In case anyone sees this one ... two weeks ago an upgrade on my system
made Netrek very unresponsive.  Eventually it was tracked down to
keyboard and mouse event handling between the X libraries and the
client.

It should have no impact on the Windows client, totally different event
architecture.

Thu Jul 10 16:04:55 EST 2008  quozl at us.netrek.org
  * input, fix for Debian Lenny Xlib changes
  Fix delayed response to keyboard events.
  
  Fixes a regression introduced by an upgrade of Debian GNU/Linux Lenny Xlib and
  Xcb layers.  The symptom was that keyboard events would be delayed, they would
  be buffered by Xlib before our code would handle them.  The cause was the use
  of select(2) and the handling of the X event queue by the client.
  
  The change is to allow Xlib a chance to read the X socket before asking Xlib
  for the events.  Then, all events are processed, before proceeding.
diff -rN -u old-netrek-client-cow/input.c new-netrek-client-cow/input.c
--- old-netrek-client-cow/input.c	2008-07-10 16:09:01.000000000 +1000
+++ new-netrek-client-cow/input.c	2008-07-10 16:09:01.000000000 +1000
@@ -755,16 +755,21 @@
 #ifndef THREADED
 
 #ifndef HAVE_WIN32
-	  if (FD_ISSET(xsock, &readfds))
+	  /* keyboard, mouse, and expose events from the X server
+	     cause the X socket to be readable, so we must direct Xlib
+	     to read them (W_EventsQueuedCk), then we process them. */
+	  if (FD_ISSET(xsock, &readfds)) {
+	    while (W_EventsQueuedCk())
+	      process_event();
+	    doflush = 1;
+	  }
 #else
 	  if (W_EventsPending())
-#endif /* !HAVE_WIN32 */
-
 	    {
 	      process_event();
-	      /* NOTE: we're no longer calling XPending(), need this */
 	      doflush = 1;
 	    }
+#endif /* !HAVE_WIN32 */
 #endif /* !THREADED */
 
 	  if (FD_ISSET(sock, &readfds) ||

-- 
James Cameron    mailto:quozl at us.netrek.org     http://quozl.netrek.org/