This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit 210b5c295d601ffea7acdb3a7505e0102571bc6f Author: krzys-h <krzy...@interia.pl> Date: Sun Jul 24 22:51:41 2016 +0200 Fix memory leak related to performance counters This commit actually fixes two problems causing the leak: * DestroyTimeStamp not being called in CProfiler (my stupid mistake in 5fea22ff03f3da5ee27be4039205010c203a8c23) * DestroyTimeStamp leaving null pointers in CSystemUtils::m_timeStamps (this was introduced by @piotrdz long ago when introducing smart pointers) --- src/common/profiler.cpp | 2 ++ src/common/system/system.cpp | 7 ++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/common/profiler.cpp b/src/common/profiler.cpp index f94a92e..f80ae84 100644 --- a/src/common/profiler.cpp +++ b/src/common/profiler.cpp @@ -53,6 +53,8 @@ void CProfiler::StopPerformanceCounter(PerformanceCounter counter) SystemTimeStamp* timeStamp = m_systemUtils->CreateTimeStamp(); m_systemUtils->GetCurrentTimeStamp(timeStamp); m_performanceCounters[counter] += m_systemUtils->TimeStampExactDiff(m_runningPerformanceCounters.top(), timeStamp); + m_systemUtils->DestroyTimeStamp(timeStamp); + m_systemUtils->DestroyTimeStamp(m_runningPerformanceCounters.top()); m_runningPerformanceCounters.pop(); if (counter == PCNT_ALL) diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index 210b4a7..ce594ea 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -36,6 +36,7 @@ #include <cassert> #include <iostream> +#include <algorithm> std::unique_ptr<CSystemUtils> CSystemUtils::Create() @@ -152,11 +153,7 @@ SystemTimeStamp* CSystemUtils::CreateTimeStamp() void CSystemUtils::DestroyTimeStamp(SystemTimeStamp *stamp) { - for (auto& timeStamp : m_timeStamps) - { - if (timeStamp.get() == stamp) - timeStamp.reset(); - } + m_timeStamps.erase(std::remove_if(m_timeStamps.begin(), m_timeStamps.end(), [&](const std::unique_ptr<SystemTimeStamp>& timeStamp) { return timeStamp.get() == stamp; })); } void CSystemUtils::CopyTimeStamp(SystemTimeStamp *dst, SystemTimeStamp *src) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits