Line 914 or thereabouts in ntserv/socket.c contains a select() call that
is used to pause for up to a second waiting for client data.

On Continuum we've been having processes consuming CPU time near this
call ... like all of the available CPU time, generating high load
average (15.4 today) and server side lag.

Processes I have intercepted with gdb suggest that the pause is being
called during version wait (main.c:161) and login wait (getname.c).

Looking at the select() call, I see that status isn't being checked.

It is quite possible that it is returning an error, and the surrounding
code is checking for a packet and not finding any ready, and so looping
back to wait again.

Before I start adding to the code at this point; any ideas?

James Cameron    mailto:quozl at