diff -r 216d39de1a44 -r 8a45c90f4580 rust/hedgewars-server/src/server/network.rs --- a/rust/hedgewars-server/src/server/network.rs Thu Feb 07 18:04:53 2019 +0300 +++ b/rust/hedgewars-server/src/server/network.rs Thu Feb 07 22:26:56 2019 +0300 @@ -330,7 +330,7 @@ client_id } - fn flush_server_messages(&mut self, mut response: handlers::Response) { + fn flush_server_messages(&mut self, mut response: handlers::Response, poll: &Poll) { debug!("{} pending server messages", response.len()); let output = response.extract_messages(&mut self.server); for (clients, message) in output { @@ -344,6 +344,10 @@ } } } + + for client_id in response.extract_removed_clients() { + self.deregister_client(poll, client_id); + } } fn create_client_socket(&self, socket: TcpStream) -> io::Result { @@ -381,7 +385,7 @@ handlers::handle_client_accept(&mut self.server, client_id, &mut response); if !response.is_empty() { - self.flush_server_messages(response); + self.flush_server_messages(response, poll); } Ok(()) @@ -438,14 +442,7 @@ } if !response.is_empty() { - self.flush_server_messages(response); - } - - if !self.server.removed_clients.is_empty() { - let ids: Vec<_> = self.server.removed_clients.drain(..).collect(); - for client_id in ids { - self.deregister_client(poll, client_id); - } + self.flush_server_messages(response, poll); } Ok(()) @@ -476,7 +473,7 @@ self.deregister_client(poll, client_id); let mut response = handlers::Response::new(client_id); handlers::handle_client_loss(&mut self.server, client_id, &mut response); - self.flush_server_messages(response); + self.flush_server_messages(response, poll); Ok(()) }