mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-27 23:17:13 +03:00
Discovery: Free some memory on VIO dir close (#2902)
This commit is contained in:
parent
bd6769a3fd
commit
7595c7e697
2 changed files with 24 additions and 1 deletions
|
@ -309,6 +309,15 @@ void DiscoveryMainThread::setupHooks(DiscoveryJob *discoveryJob, const QString &
|
||||||
connect(discoveryJob, SIGNAL(doOpendirSignal(QString,DiscoveryDirectoryResult*)),
|
connect(discoveryJob, SIGNAL(doOpendirSignal(QString,DiscoveryDirectoryResult*)),
|
||||||
this, SLOT(doOpendirSlot(QString,DiscoveryDirectoryResult*)),
|
this, SLOT(doOpendirSlot(QString,DiscoveryDirectoryResult*)),
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
connect(discoveryJob, SIGNAL(doClosedirSignal(QString)),
|
||||||
|
this, SLOT(doClosedirSlot(QString)),
|
||||||
|
Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiscoveryMainThread::doClosedirSlot(QString path)
|
||||||
|
{
|
||||||
|
//qDebug() << Q_FUNC_INFO << "Invalidating" << path;
|
||||||
|
deleteCacheEntry(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Coming from owncloud_opendir -> DiscoveryJob::vio_opendir_hook -> doOpendirSignal
|
// Coming from owncloud_opendir -> DiscoveryJob::vio_opendir_hook -> doOpendirSignal
|
||||||
|
@ -461,9 +470,11 @@ void DiscoveryJob::remote_vio_closedir_hook (csync_vio_handle_t *dhandle, void
|
||||||
{
|
{
|
||||||
DiscoveryJob *discoveryJob = static_cast<DiscoveryJob*>(userdata);
|
DiscoveryJob *discoveryJob = static_cast<DiscoveryJob*>(userdata);
|
||||||
if (discoveryJob) {
|
if (discoveryJob) {
|
||||||
qDebug() << Q_FUNC_INFO << discoveryJob;
|
|
||||||
DiscoveryDirectoryResult *directoryResult = static_cast<DiscoveryDirectoryResult*> (dhandle);
|
DiscoveryDirectoryResult *directoryResult = static_cast<DiscoveryDirectoryResult*> (dhandle);
|
||||||
|
QString path = directoryResult->path;
|
||||||
|
qDebug() << Q_FUNC_INFO << discoveryJob << path;
|
||||||
delete directoryResult; // just deletes the struct and the iterator, the data itself is owned by the SyncEngine/DiscoveryMainThread
|
delete directoryResult; // just deletes the struct and the iterator, the data itself is owned by the SyncEngine/DiscoveryMainThread
|
||||||
|
emit discoveryJob->doClosedirSignal(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,16 @@ public:
|
||||||
DiscoveryMainThread(AccountPtr account) : QObject(), _account(account), _currentDiscoveryDirectoryResult(0) {
|
DiscoveryMainThread(AccountPtr account) : QObject(), _account(account), _currentDiscoveryDirectoryResult(0) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
void deleteCacheEntry(QString path) {
|
||||||
|
//qDebug() << path << _directoryContents.value(path).count();
|
||||||
|
foreach (csync_vio_file_stat_t* stat, _directoryContents.value(path)) {
|
||||||
|
csync_vio_file_stat_destroy(stat);
|
||||||
|
}
|
||||||
|
_directoryContents.remove(path);
|
||||||
|
}
|
||||||
|
|
||||||
~DiscoveryMainThread() {
|
~DiscoveryMainThread() {
|
||||||
|
// Delete the _contents_ of the list-map explicitly:
|
||||||
foreach (const QLinkedList<csync_vio_file_stat_t*> & list, _directoryContents) {
|
foreach (const QLinkedList<csync_vio_file_stat_t*> & list, _directoryContents) {
|
||||||
foreach (csync_vio_file_stat_t* stat, list) {
|
foreach (csync_vio_file_stat_t* stat, list) {
|
||||||
csync_vio_file_stat_destroy(stat);
|
csync_vio_file_stat_destroy(stat);
|
||||||
|
@ -100,6 +109,7 @@ public:
|
||||||
public slots:
|
public slots:
|
||||||
// From DiscoveryJob:
|
// From DiscoveryJob:
|
||||||
void doOpendirSlot(QString url, DiscoveryDirectoryResult* );
|
void doOpendirSlot(QString url, DiscoveryDirectoryResult* );
|
||||||
|
void doClosedirSlot(QString path);
|
||||||
|
|
||||||
// From Job:
|
// From Job:
|
||||||
void singleDirectoryJobResultSlot(QLinkedList<csync_vio_file_stat_t*>);
|
void singleDirectoryJobResultSlot(QLinkedList<csync_vio_file_stat_t*>);
|
||||||
|
@ -164,6 +174,8 @@ signals:
|
||||||
|
|
||||||
// After the discovery job has been woken up again (_vioWaitCondition)
|
// After the discovery job has been woken up again (_vioWaitCondition)
|
||||||
void doOpendirSignal(QString url, DiscoveryDirectoryResult*);
|
void doOpendirSignal(QString url, DiscoveryDirectoryResult*);
|
||||||
|
// to tell the main thread to invalidate its directory data
|
||||||
|
void doClosedirSignal(QString path);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue