summaryrefslogtreecommitdiff
path: root/src/client_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2016-12-01 20:55:28 +0000
committerMaxime Coste <mawww@kakoune.org>2016-12-01 20:55:28 +0000
commit089ee8ac0ab2a0e1801bfe99e0e799aa7a19b8d6 (patch)
treea678c0677ff595326a9a433b1b2f00f6e09c4387 /src/client_manager.cc
parenta65e8142f37fc8c22fc697440ea5632d604ff91f (diff)
Fix crash when quitting the first client while another client is connected
Diffstat (limited to 'src/client_manager.cc')
-rw-r--r--src/client_manager.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 97ace9e1..f2989b90 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -71,8 +71,12 @@ void ClientManager::process_pending_inputs() const
while (true)
{
bool had_input = false;
- for (auto& client : m_clients)
- had_input = client->process_pending_inputs() or had_input;
+ // Use index based iteration as a m_clients might get mutated during
+ // 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)
+ had_input = m_clients[i]->process_pending_inputs() or had_input;
if (not had_input)
break;