diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-10-25 21:16:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-25 21:16:13 +0200 |
commit | 81373b9633bdcd143b8417865f1ea31c95ab41a1 (patch) | |
tree | c31b49206159faa6a531c7606b9fd35e2fccdc4b | |
parent | 6ce35e176fdb31a6ff5c570bf72a53bdde343c5d (diff) | |
parent | 198af06ff69fb199ab2c865fea304848777a0498 (diff) |
Merge pull request #33069 from Faless/mp/fix_cache_cleanup
MultiplayerAPI cleanup cache when peer disconnects
-rw-r--r-- | core/io/multiplayer_api.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/core/io/multiplayer_api.cpp b/core/io/multiplayer_api.cpp index 0ba84d0c8f..1426dbbd4d 100644 --- a/core/io/multiplayer_api.cpp +++ b/core/io/multiplayer_api.cpp @@ -602,7 +602,16 @@ void MultiplayerAPI::_add_peer(int p_id) { void MultiplayerAPI::_del_peer(int p_id) { connected_peers.erase(p_id); - path_get_cache.erase(p_id); // I no longer need your cache, sorry. + // Cleanup get cache. + path_get_cache.erase(p_id); + // Cleanup sent cache. + // Some refactoring is needed to make this faster and do paths GC. + List<NodePath> keys; + path_send_cache.get_key_list(&keys); + for (List<NodePath>::Element *E = keys.front(); E; E = E->next()) { + PathSentCache *psc = path_send_cache.getptr(E->get()); + psc->confirmed_peers.erase(p_id); + } emit_signal("network_peer_disconnected", p_id); } |