try to fix memoery leak
This commit is contained in:
parent
9325b11f60
commit
b7dc98aefa
|
@ -112,16 +112,18 @@ PackageLoader *Repository::init()
|
||||||
QWriteLocker locker(lock());
|
QWriteLocker locker(lock());
|
||||||
// wipe current packages
|
// wipe current packages
|
||||||
wipePackages();
|
wipePackages();
|
||||||
if(PackageLoader *loader = internalInit()) {
|
m_loader.reset(internalInit());
|
||||||
if(loader->future().isRunning()) {
|
if(m_loader) {
|
||||||
|
if(m_loader->future().isRunning()) {
|
||||||
auto watcher = new QFutureWatcher<void>;
|
auto watcher = new QFutureWatcher<void>;
|
||||||
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::updateGroups);
|
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::updateGroups);
|
||||||
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::removeBusyFlag);
|
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::removeBusyFlag);
|
||||||
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::initialized);
|
connect(watcher, &QFutureWatcher<void>::finished, this, &Repository::initialized);
|
||||||
connect(watcher, &QFutureWatcher<void>::finished, watcher, &QFutureWatcher<void>::deleteLater);
|
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 {
|
} else {
|
||||||
updateGroups();
|
updateGroups();
|
||||||
removeBusyFlag();
|
removeBusyFlag();
|
||||||
|
@ -1021,7 +1023,7 @@ Package *Repository::addPackageFromDescription(QString name, const QList<QByteAr
|
||||||
pkgRawPtr->putDescription(name, fields, origin);
|
pkgRawPtr->putDescription(name, fields, origin);
|
||||||
{
|
{
|
||||||
QWriteLocker locker(&m_lock);
|
QWriteLocker locker(&m_lock);
|
||||||
m_packages[name] = move(pkg);
|
//m_packages[name] = move(pkg);
|
||||||
}
|
}
|
||||||
return pkgRawPtr;
|
return pkgRawPtr;
|
||||||
}
|
}
|
||||||
|
@ -1043,4 +1045,9 @@ void Repository::removeBusyFlag()
|
||||||
emit available();
|
emit available();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Repository::discardPackageLoader()
|
||||||
|
{
|
||||||
|
m_loader.reset();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace PackageManagement
|
} // namespace PackageManagement
|
||||||
|
|
|
@ -301,6 +301,9 @@ protected slots:
|
||||||
void addBusyFlag();
|
void addBusyFlag();
|
||||||
void removeBusyFlag();
|
void removeBusyFlag();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void discardPackageLoader();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit Repository(const QString &name, uint32 index = invalidIndex, QObject *parent = nullptr);
|
explicit Repository(const QString &name, uint32 index = invalidIndex, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
@ -317,6 +320,7 @@ protected:
|
||||||
QString m_srcDir;
|
QString m_srcDir;
|
||||||
QString m_pkgDir;
|
QString m_pkgDir;
|
||||||
QAtomicInteger<byte> m_isBusy;
|
QAtomicInteger<byte> m_isBusy;
|
||||||
|
std::unique_ptr<PackageLoader> m_loader;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QReadWriteLock m_lock;
|
QReadWriteLock m_lock;
|
||||||
|
|
Loading…
Reference in New Issue