try to fix memoery leak

This commit is contained in:
Martchus 2016-03-01 20:32:20 +01:00
parent 9325b11f60
commit b7dc98aefa
2 changed files with 16 additions and 5 deletions

View File

@ -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<void>;
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::updateGroups);
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::removeBusyFlag);
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::initialized);
connect(watcher, &QFutureWatcher<void>::finished, watcher, &QFutureWatcher<void>::deleteLater);
watcher->setFuture(loader->future());
connect(watcher, &QFutureWatcher<void>::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 QList<QByteAr
pkgRawPtr->putDescription(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

View File

@ -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<byte> m_isBusy;
std::unique_ptr<PackageLoader> m_loader;
private:
QReadWriteLock m_lock;