From 53a217d4e4850177a8baeb117e26348d66947ffa Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 11 Sep 2019 11:03:27 +0200 Subject: [PATCH] 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. --- src/libsync/discovery.cpp | 8 +++----- src/libsync/discovery.h | 4 +--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index f1dfd903c..4f162e18f 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -52,7 +52,7 @@ void ProcessDirectoryJob::start() } if (_queryLocal == NormalQuery) { - _localJob = startAsyncLocalQuery(); + startAsyncLocalQuery(); } else { _localQueryDone = true; } @@ -1430,7 +1430,7 @@ DiscoverySingleDirectoryJob *ProcessDirectoryJob::startAsyncServerQuery() return serverJob; } -DiscoverySingleLocalDirectoryJob *ProcessDirectoryJob::startAsyncLocalQuery() +void ProcessDirectoryJob::startAsyncLocalQuery() { QString localPath = _discoveryData->_localDir + _currentFolder._local; auto localJob = new DiscoverySingleLocalDirectoryJob(_discoveryData->_account, localPath, _discoveryData->_syncOptions._vfs.data(), this); @@ -1477,9 +1477,7 @@ DiscoverySingleLocalDirectoryJob *ProcessDirectoryJob::startAsyncLocalQuery() }); QThreadPool *pool = QThreadPool::globalInstance(); - pool->start(localJob); - - return localJob; + pool->start(localJob); // QThreadPool takes ownership } diff --git a/src/libsync/discovery.h b/src/libsync/discovery.h index e731562b2..6b165421e 100644 --- a/src/libsync/discovery.h +++ b/src/libsync/discovery.h @@ -206,7 +206,7 @@ private: * * Fills _localNormalQueryEntries. */ - DiscoverySingleLocalDirectoryJob *startAsyncLocalQuery(); + void startAsyncLocalQuery(); /** Sets _pinState, the directory's pin state @@ -243,8 +243,6 @@ private: RemotePermissions _rootPermissions; QPointer _serverJob; - QPointer _localJob; - /** Number of currently running async jobs. *