diff options
author | Břetislav Štec <valsiterb@gmail.com> | 2015-07-19 01:35:47 +0200 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2015-07-27 11:06:46 -0400 |
commit | 88a6b9f52d6ffd4e351155dee661fe8ea084a9aa (patch) | |
tree | 8852b46e8337894bb26d034333878e737aea140f /src/minimap.cpp | |
parent | 9bc0241e44432491df9984be4f321e8bf94f2eb1 (diff) | |
download | minetest-88a6b9f52d6ffd4e351155dee661fe8ea084a9aa.tar.gz minetest-88a6b9f52d6ffd4e351155dee661fe8ea084a9aa.tar.bz2 minetest-88a6b9f52d6ffd4e351155dee661fe8ea084a9aa.zip |
Fixed minimap memory leak
Diffstat (limited to 'src/minimap.cpp')
-rw-r--r-- | src/minimap.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/minimap.cpp b/src/minimap.cpp index d37a083ef..950202c6a 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -102,7 +102,13 @@ void MinimapUpdateThread::doUpdate() while (popBlockUpdate(&update)) { if (update.data) { - m_blocks_cache[update.pos] = update.data; + // Swap two values in the map using single lookup + std::pair<std::map<v3s16, MinimapMapblock*>::iterator, bool> + result = m_blocks_cache.insert(std::make_pair(update.pos, update.data)); + if (result.second == false) { + delete result.first->second; + result.first->second = update.data; + } } else { std::map<v3s16, MinimapMapblock *>::iterator it; it = m_blocks_cache.find(update.pos); |