USER/NICK bug.
Brought to you by:
donwulff
In short, the server was/is not responding to USER/NICK order of registration, even from local clients. This causes clients who are refused their first choice of nick to hang until ping timeout.
In m_nick(), when checking to see if we are ready to proceed with registration, we're using IsPerson() ; which checks for sptr->user *and* for sptr->status == STAT_CLIENT ; which is only set (using SetClient()) inside register_user. Which is, therefore, not called.
Fix: replace IsPerson(sptr) with sptr->user.