summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppsnapshotupdater.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@me.com>2013-10-10 10:26:39 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-11-12 09:24:13 +0100
commit566be0995d184cd2c3f99d006ffb7249aeff2e57 (patch)
tree132192382cda9797eb5ea05a792938f1e3148c3b /src/plugins/cpptools/cppsnapshotupdater.cpp
parentd58da4bd7eb4d1f6c983a4a62e5845fe08ede539 (diff)
downloadqt-creator-566be0995d184cd2c3f99d006ffb7249aeff2e57.tar.gz
C++: Release more documents.
- fix memory leak in find-usages - do not retain snapshot in search history - when an editor is invisible for more than 2 minutes, release the backing snapshot Retaining snapshots will retain their documents, and if done for too long, the memory consumption might grow. This is especially the case when switching to a different kit (Qt version): in that case, the new versions of headers will be indexed, while the old ones stay around. Task-number: QTCREATORBUG-5583 Task-number: QTCREATORBUG-7645 Task-number: QTCREATORBUG-9842 Change-Id: I045eda1565e0a3fa702baeffaab9c12662f90289 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com> Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppsnapshotupdater.cpp')
-rw-r--r--src/plugins/cpptools/cppsnapshotupdater.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppsnapshotupdater.cpp b/src/plugins/cpptools/cppsnapshotupdater.cpp
index 11cd3ff5b3..0a97a98fdf 100644
--- a/src/plugins/cpptools/cppsnapshotupdater.cpp
+++ b/src/plugins/cpptools/cppsnapshotupdater.cpp
@@ -41,6 +41,7 @@ SnapshotUpdater::SnapshotUpdater(const QString &fileInEditor)
, m_fileInEditor(fileInEditor)
, m_editorDefinesChangedSinceLastUpdate(false)
, m_usePrecompiledHeaders(false)
+ , m_forceSnapshotInvalidation(false)
{
}
@@ -62,6 +63,11 @@ void SnapshotUpdater::update(CppModelManager::WorkingCopy workingCopy)
updateProjectPart();
+ if (m_forceSnapshotInvalidation) {
+ invalidateSnapshot = true;
+ m_forceSnapshotInvalidation = false;
+ }
+
if (m_projectPart) {
configFile += m_projectPart->defines;
includePaths = m_projectPart->includePaths;
@@ -186,6 +192,14 @@ void SnapshotUpdater::update(CppModelManager::WorkingCopy workingCopy)
}
}
+void SnapshotUpdater::releaseSnapshot()
+{
+ QMutexLocker locker(&m_mutex);
+ m_snapshot = Snapshot();
+ m_deps = DependencyTable();
+ m_forceSnapshotInvalidation = true;
+}
+
Document::Ptr SnapshotUpdater::document() const
{
QMutexLocker locker(&m_mutex);