From 27b29ecbeedaf4a1727ffd7da7a9d4119189c763 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Sat, 26 May 2018 16:58:20 +0800 Subject: [PATCH] Fix issue of possible dead reference to Options Drive and Options are both Singlton, their destruct sequence is random. To avoid the dead reference, Drive destructor should not reference to Options. --- src/filesystem/Drive.cpp | 10 +++++----- src/filesystem/Drive.h | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/filesystem/Drive.cpp b/src/filesystem/Drive.cpp index 2f06497..a3de9a3 100644 --- a/src/filesystem/Drive.cpp +++ b/src/filesystem/Drive.cpp @@ -117,6 +117,8 @@ Drive::Drive() : m_mountable(true), m_cleanup(false), m_connect(false), + m_diskCacheFolder( + QS::Configure::Options::Instance().GetDiskCacheDirectory()), m_client(ClientFactory::Instance().MakeClient()), m_transferManager( TransferManagerFactory::Create(TransferManagerConfigure())) { @@ -150,11 +152,9 @@ void Drive::CleanUp() { if (!GetCleanup()) { // remove disk cache folder if existing // log off, to avoid dead reference to log (a singleton) - string diskfolder = - QS::Configure::Options::Instance().GetDiskCacheDirectory(); - if (QS::Utils::FileExists(diskfolder) && - QS::Utils::IsDirectory(diskfolder).first) { - DeleteFilesInDirectory(diskfolder, true); // delete folder itself + if (QS::Utils::FileExists(m_diskCacheFolder) && + QS::Utils::IsDirectory(m_diskCacheFolder).first) { + DeleteFilesInDirectory(m_diskCacheFolder, true); // delete folder itself } m_client.reset(); diff --git a/src/filesystem/Drive.h b/src/filesystem/Drive.h index 685b3e2..d298a1d 100644 --- a/src/filesystem/Drive.h +++ b/src/filesystem/Drive.h @@ -285,6 +285,8 @@ class Drive : public Singleton { bool m_connect; // denote if drive connected to storage + std::string m_diskCacheFolder; + boost::shared_ptr m_client; boost::shared_ptr m_transferManager; boost::shared_ptr m_cache;