return-ing to the default procedure after deleting src would cause the problem you are having?
In my opinion you should be using client/Del() for this type of thing.
client/Del() world << "[src] has logged out." onlineplayers.Remove(src.mob) or onlineplayers -= src.mob // personal preference is Remove() players -- is the same thing as players -= 1
for(var/mob/m in world) // you should loop through clients instead if(m.client) // you should be checking if they are client here m.updatewho() // this loop will cause a delay before the actual client logs
In my opinion you should be using client/Del() for this type of thing.