diff options
| author | Maxime Coste <mawww@kakoune.org> | 2019-04-04 13:10:38 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2019-04-04 13:10:38 +1100 |
| commit | cc788c888e3e7c273cb518337f593bd3a768e1ac (patch) | |
| tree | 6560a1d408293053078485d947afaf7c67757398 /src/client_manager.cc | |
| parent | d91e017803aca3b75dbb3d1cfca26a811022c1d4 (diff) | |
Fix detection of client ungraceful disconnection
Diffstat (limited to 'src/client_manager.cc')
| -rw-r--r-- | src/client_manager.cc | 12 |
1 files changed, 10 insertions, 2 deletions
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<UserInterface>&& 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; |
