Skip to content

Commit 4e6a3e3

Browse files
committed
Changed reaper to delete in the same method as killing because there is no guarantee that the same element remains after std::remove
1 parent 6ac9b2b commit 4e6a3e3

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

server_src/client_manager.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,21 +73,19 @@ void ClientManager::kill_all() {
7373

7474

7575
void ClientManager::reap_dead_client_connections() {
76-
auto lambda_kill_client_if_dead = [](ClientConnection* client) {
76+
auto lambda_kill_and_delete_client_if_dead = [](ClientConnection* client) {
7777
if (!client->is_connection_alive()) {
7878
client->kill();
7979
client->stop();
8080
client->join();
81+
delete client;
8182
return true;
8283
}
8384
return false;
8485
};
8586

86-
auto dead_clients_iterator =
87-
std::remove_if(this->clients.begin(), this->clients.end(), lambda_kill_client_if_dead);
88-
89-
auto lambda_clean_client_memory = [](ClientConnection* client) { delete client; };
90-
std::for_each(dead_clients_iterator, this->clients.end(), lambda_clean_client_memory);
87+
auto dead_clients_iterator = std::remove_if(this->clients.begin(), this->clients.end(),
88+
lambda_kill_and_delete_client_if_dead);
9189

9290
this->clients.erase(dead_clients_iterator, this->clients.end());
9391
}

0 commit comments

Comments
 (0)