From f053285852be89ef4238b1a6682a63233501f342 Mon Sep 17 00:00:00 2001 From: thilo Date: Fri, 18 Aug 2006 01:50:51 +0000 Subject: Fix 100% CPU usage on idle dedicated servers. git-svn-id: svn://svn.icculus.org/quake3/trunk@850 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/unix/unix_net.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'code/unix') diff --git a/code/unix/unix_net.c b/code/unix/unix_net.c index 73c0fd6..12908eb 100644 --- a/code/unix/unix_net.c +++ b/code/unix/unix_net.c @@ -648,19 +648,40 @@ char *NET_ErrorString (void) // sleeps msec or until net socket is ready void NET_Sleep(int msec) { - struct timeval timeout; + struct timeval timeout; fd_set fdset; extern qboolean stdin_active; + qboolean not_empty = qfalse; - if (!ip_socket || !com_dedicated->integer) + if (!com_dedicated->integer) return; // we're not a server, just run full speed FD_ZERO(&fdset); if (stdin_active) + { FD_SET(0, &fdset); // stdin is processed too - FD_SET(ip_socket, &fdset); // network socket - timeout.tv_sec = msec/1000; - timeout.tv_usec = (msec%1000)*1000; - select(ip_socket+1, &fdset, NULL, NULL, &timeout); + not_empty = qtrue; + } + if(ip_socket && com_sv_running->integer) + { + FD_SET(ip_socket, &fdset); // network socket + not_empty = qtrue; + } + + // There's no reason to call select() with an empty set. + if(not_empty) + { + if(msec >= 0) + { + timeout.tv_sec = msec/1000; + timeout.tv_usec = (msec%1000)*1000; + select(ip_socket+1, &fdset, NULL, NULL, &timeout); + } + else + { + // Block indefinitely + select(ip_socket+1, &fdset, NULL, NULL, NULL); + } + } } -- cgit v1.2.3