From ba7dfd679d83bbe71354835722f21ce710684be3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Kera=CC=88nen?= Date: Thu, 22 Nov 2018 21:48:00 +0200 Subject: [PATCH] Fixed|FS|libcore: Crash when disconnecting from server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The server’s remote files were unmounted incorrectly, causing a folder to be destroyed twice. --- doomsday/sdk/libcore/src/filesys/remote/link.cpp | 9 ++++++--- doomsday/sdk/libshell/src/packagedownloader.cpp | 7 ++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/doomsday/sdk/libcore/src/filesys/remote/link.cpp b/doomsday/sdk/libcore/src/filesys/remote/link.cpp index 172544adfa..0914716bf1 100644 --- a/doomsday/sdk/libcore/src/filesys/remote/link.cpp +++ b/doomsday/sdk/libcore/src/filesys/remote/link.cpp @@ -128,10 +128,13 @@ Link::~Link() { d->cancelAllQueries(); - // Normally, the local folder will be deleted when the link is disconnected. - if (auto *folder = FS::tryLocate(d->localRootPath)) + if (d->state != Deinitialized) { - delete folder; + // Normally, the local folder will be deleted when the link is disconnected. + if (auto *folder = FS::tryLocate(d->localRootPath)) + { + delete folder; + } } } diff --git a/doomsday/sdk/libshell/src/packagedownloader.cpp b/doomsday/sdk/libshell/src/packagedownloader.cpp index 1015e94831..bf6a850fd8 100644 --- a/doomsday/sdk/libshell/src/packagedownloader.cpp +++ b/doomsday/sdk/libshell/src/packagedownloader.cpp @@ -296,13 +296,14 @@ void PackageDownloader::unmountServerRepository() { d->clearDownloads(); d->unlinkRemotePackages(); + filesys::RemoteFeedRelay::get().removeRepository(d->fileRepository); + d->fileRepository.clear(); + d->isCancelled = false; + if (Folder *remoteFiles = FS::tryLocate(PATH_REMOTE_SERVER)) { trash(remoteFiles); } - filesys::RemoteFeedRelay::get().removeRepository(d->fileRepository); - d->fileRepository.clear(); - d->isCancelled = false; } void PackageDownloader::download(StringList packageIds, std::function callback)