diff --git a/utils/cloud_dispatcher/dispatcherserver.cpp b/utils/cloud_dispatcher/dispatcherserver.cpp index 90503e19..bd8d2c4e 100644 --- a/utils/cloud_dispatcher/dispatcherserver.cpp +++ b/utils/cloud_dispatcher/dispatcherserver.cpp @@ -49,6 +49,9 @@ void DispatcherServer::cleanClients() { if (!c->isPIObject()) piCout << "ACHTUNG! Non-piobject client!"; } piDeleteAllAndClear(rmrf_clients); + for (auto s: rmrf_servers) + s->close(); + piDeleteAllAndClear(rmrf_servers); for (auto c: clients) { if (!index_c_servers.contains(c) && !index_c_clients.contains(c)) { if (!rm_clients.contains(c)) rm_clients << c; @@ -205,7 +208,7 @@ void DispatcherServer::disconnectClient(DispatcherClient * client) { } c_servers.remove(cs->serverUUID()); index_c_servers.remove(client); - delete cs; + if (!rmrf_servers.contains(cs)) rmrf_servers << cs; } CloudServer * cc = index_c_clients.value(client, nullptr); if (cc) { diff --git a/utils/cloud_dispatcher/dispatcherserver.h b/utils/cloud_dispatcher/dispatcherserver.h index f22eeb8f..4c4cc82a 100644 --- a/utils/cloud_dispatcher/dispatcherserver.h +++ b/utils/cloud_dispatcher/dispatcherserver.h @@ -36,6 +36,7 @@ private: PIMap index_c_clients; PIVector rm_clients; PIVector rmrf_clients; + PIVector rmrf_servers; PITimer timeout_timer; PIMutex map_mutex; uint client_gid;