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*)),
|
||||
this, SLOT(doOpendirSlot(QString,DiscoveryDirectoryResult*)),
|
||||
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
|
||||
|
@ -461,9 +470,11 @@ void DiscoveryJob::remote_vio_closedir_hook (csync_vio_handle_t *dhandle, void
|
|||
{
|
||||
DiscoveryJob *discoveryJob = static_cast<DiscoveryJob*>(userdata);
|
||||
if (discoveryJob) {
|
||||
qDebug() << Q_FUNC_INFO << discoveryJob;
|
||||
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
|
||||
emit discoveryJob->doClosedirSignal(path);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -87,7 +87,16 @@ public:
|
|||
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() {
|
||||
// Delete the _contents_ of the list-map explicitly:
|
||||
foreach (const QLinkedList<csync_vio_file_stat_t*> & list, _directoryContents) {
|
||||
foreach (csync_vio_file_stat_t* stat, list) {
|
||||
csync_vio_file_stat_destroy(stat);
|
||||
|
@ -100,6 +109,7 @@ public:
|
|||
public slots:
|
||||
// From DiscoveryJob:
|
||||
void doOpendirSlot(QString url, DiscoveryDirectoryResult* );
|
||||
void doClosedirSlot(QString path);
|
||||
|
||||
// From Job:
|
||||
void singleDirectoryJobResultSlot(QLinkedList<csync_vio_file_stat_t*>);
|
||||
|
@ -164,6 +174,8 @@ signals:
|
|||
|
||||
// After the discovery job has been woken up again (_vioWaitCondition)
|
||||
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