From cc788c888e3e7c273cb518337f593bd3a768e1ac Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Thu, 4 Apr 2019 13:10:38 +1100 Subject: Fix detection of client ungraceful disconnection --- src/client_manager.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/client_manager.cc') diff --git a/src/client_manager.cc b/src/client_manager.cc index 2f2a9e84..63a9201e 100644 --- a/src/client_manager.cc +++ b/src/client_manager.cc @@ -75,7 +75,7 @@ Client* ClientManager::create_client(std::unique_ptr&& ui, int pi return contains(m_clients, client) ? client : nullptr; } -void ClientManager::process_pending_inputs() const +void ClientManager::process_pending_inputs() { while (true) { @@ -84,8 +84,16 @@ void ClientManager::process_pending_inputs() const // client input processing, which would break iterator based iteration. // (its fine to skip a client if that happens as had_input will be true // if a client triggers client removal) - for (int i = 0; i < m_clients.size(); ++i) + for (int i = 0; i < m_clients.size(); ) + { + if (not m_clients[i]->is_ui_ok()) + { + remove_client(*m_clients[i], false, -1); + continue; + } had_input = m_clients[i]->process_pending_inputs() or had_input; + ++i; + } if (not had_input) break; -- cgit v1.2.3