From b7dc98aefab886f431bc4139bb7834bff1aea4a1 Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 1 Mar 2016 20:32:20 +0100 Subject: [PATCH] try to fix memoery leak --- alpm/repository.cpp | 17 ++++++++++++----- alpm/repository.h | 4 ++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/alpm/repository.cpp b/alpm/repository.cpp index 3e6fa4f..ea69de1 100644 --- a/alpm/repository.cpp +++ b/alpm/repository.cpp @@ -112,16 +112,18 @@ PackageLoader *Repository::init() QWriteLocker locker(lock()); // wipe current packages wipePackages(); - if(PackageLoader *loader = internalInit()) { - if(loader->future().isRunning()) { + m_loader.reset(internalInit()); + if(m_loader) { + if(m_loader->future().isRunning()) { auto watcher = new QFutureWatcher; connect(watcher, &QFutureWatcher::finished, this, &Repository::updateGroups); connect(watcher, &QFutureWatcher::finished, this, &Repository::removeBusyFlag); connect(watcher, &QFutureWatcher::finished, this, &Repository::initialized); connect(watcher, &QFutureWatcher::finished, watcher, &QFutureWatcher::deleteLater); - watcher->setFuture(loader->future()); + connect(watcher, &QFutureWatcher::finished, this, &Repository::discardPackageLoader); + watcher->setFuture(m_loader->future()); } - return loader; + return m_loader.get(); } else { updateGroups(); removeBusyFlag(); @@ -1021,7 +1023,7 @@ Package *Repository::addPackageFromDescription(QString name, const QListputDescription(name, fields, origin); { QWriteLocker locker(&m_lock); - m_packages[name] = move(pkg); + //m_packages[name] = move(pkg); } return pkgRawPtr; } @@ -1043,4 +1045,9 @@ void Repository::removeBusyFlag() emit available(); } +void Repository::discardPackageLoader() +{ + m_loader.reset(); +} + } // namespace PackageManagement diff --git a/alpm/repository.h b/alpm/repository.h index f290047..f15f20b 100644 --- a/alpm/repository.h +++ b/alpm/repository.h @@ -301,6 +301,9 @@ protected slots: void addBusyFlag(); void removeBusyFlag(); +private slots: + void discardPackageLoader(); + protected: explicit Repository(const QString &name, uint32 index = invalidIndex, QObject *parent = nullptr); @@ -317,6 +320,7 @@ protected: QString m_srcDir; QString m_pkgDir; QAtomicInteger m_isBusy; + std::unique_ptr m_loader; private: QReadWriteLock m_lock;