diff options
author | Erik Verbruggen <erik.verbruggen@me.com> | 2013-10-10 10:26:39 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-11-12 09:24:13 +0100 |
commit | 566be0995d184cd2c3f99d006ffb7249aeff2e57 (patch) | |
tree | 132192382cda9797eb5ea05a792938f1e3148c3b /src/plugins/cpptools/cppsnapshotupdater.cpp | |
parent | d58da4bd7eb4d1f6c983a4a62e5845fe08ede539 (diff) | |
download | qt-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.cpp | 14 |
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); |