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>
This commit is contained in:
Erik Verbruggen
2013-10-10 10:26:39 +02:00
committed by Nikolai Kosjar
parent d58da4bd7e
commit 566be0995d
10 changed files with 89 additions and 20 deletions

View File

@@ -60,13 +60,12 @@ using namespace Utils;
FunctionDeclDefLinkFinder::FunctionDeclDefLinkFinder(QObject *parent)
: QObject(parent)
{
connect(&m_watcher, SIGNAL(finished()),
this, SLOT(onFutureDone()));
}
void FunctionDeclDefLinkFinder::onFutureDone()
{
QSharedPointer<FunctionDeclDefLink> link = m_watcher.result();
QSharedPointer<FunctionDeclDefLink> link = m_watcher->result();
m_watcher.reset();
if (link) {
link->linkSelection = m_scannedSelection;
link->nameSelection = m_nameSelection;
@@ -256,7 +255,9 @@ void FunctionDeclDefLinkFinder::startFindLinkAt(
result->sourceFunctionDeclarator = funcDecl;
// handle the rest in a thread
m_watcher.setFuture(QtConcurrent::run(&findLinkHelper, result, refactoringChanges));
m_watcher.reset(new QFutureWatcher<QSharedPointer<FunctionDeclDefLink> >());
connect(m_watcher.data(), SIGNAL(finished()), this, SLOT(onFutureDone()));
m_watcher->setFuture(QtConcurrent::run(&findLinkHelper, result, refactoringChanges));
}
FunctionDeclDefLink::FunctionDeclDefLink()
@@ -270,10 +271,6 @@ FunctionDeclDefLink::FunctionDeclDefLink()
targetFunctionDeclarator = 0;
}
FunctionDeclDefLink::~FunctionDeclDefLink()
{
}
bool FunctionDeclDefLink::isValid() const
{
return !linkSelection.isNull();