Don't store pointer to local job

There were crashes in the QPointer assignment. Possibly the thread pool
is done with the job and deletes it before the assignment is done.
This commit is contained in:
Christian Kamm 2019-09-11 11:03:27 +02:00 committed by Kevin Ottens
parent 26b5e36351
commit 53a217d4e4
No known key found for this signature in database
GPG key ID: 074BBBCB8DECC9E2
2 changed files with 4 additions and 8 deletions

View file

@ -52,7 +52,7 @@ void ProcessDirectoryJob::start()
} }
if (_queryLocal == NormalQuery) { if (_queryLocal == NormalQuery) {
_localJob = startAsyncLocalQuery(); startAsyncLocalQuery();
} else { } else {
_localQueryDone = true; _localQueryDone = true;
} }
@ -1430,7 +1430,7 @@ DiscoverySingleDirectoryJob *ProcessDirectoryJob::startAsyncServerQuery()
return serverJob; return serverJob;
} }
DiscoverySingleLocalDirectoryJob *ProcessDirectoryJob::startAsyncLocalQuery() void ProcessDirectoryJob::startAsyncLocalQuery()
{ {
QString localPath = _discoveryData->_localDir + _currentFolder._local; QString localPath = _discoveryData->_localDir + _currentFolder._local;
auto localJob = new DiscoverySingleLocalDirectoryJob(_discoveryData->_account, localPath, _discoveryData->_syncOptions._vfs.data(), this); auto localJob = new DiscoverySingleLocalDirectoryJob(_discoveryData->_account, localPath, _discoveryData->_syncOptions._vfs.data(), this);
@ -1477,9 +1477,7 @@ DiscoverySingleLocalDirectoryJob *ProcessDirectoryJob::startAsyncLocalQuery()
}); });
QThreadPool *pool = QThreadPool::globalInstance(); QThreadPool *pool = QThreadPool::globalInstance();
pool->start(localJob); pool->start(localJob); // QThreadPool takes ownership
return localJob;
} }

View file

@ -206,7 +206,7 @@ private:
* *
* Fills _localNormalQueryEntries. * Fills _localNormalQueryEntries.
*/ */
DiscoverySingleLocalDirectoryJob *startAsyncLocalQuery(); void startAsyncLocalQuery();
/** Sets _pinState, the directory's pin state /** Sets _pinState, the directory's pin state
@ -243,8 +243,6 @@ private:
RemotePermissions _rootPermissions; RemotePermissions _rootPermissions;
QPointer<DiscoverySingleDirectoryJob> _serverJob; QPointer<DiscoverySingleDirectoryJob> _serverJob;
QPointer<DiscoverySingleLocalDirectoryJob> _localJob;
/** Number of currently running async jobs. /** Number of currently running async jobs.
* *