From 763a5d6c08006c319ed92f4088a4d3c211f80cf6 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Thu, 13 Feb 2020 23:03:56 -0500 Subject: more instrumentation tighter mutexes, required thread-safe FileEntry --- src/shared/directoryentry.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src/shared/directoryentry.h') diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h index 71e8b32c..8f6afbb1 100644 --- a/src/shared/directoryentry.h +++ b/src/shared/directoryentry.h @@ -221,6 +221,7 @@ private: DirectoryEntry *m_Parent; mutable FILETIME m_FileTime; uint64_t m_FileSize, m_CompressedFileSize; + mutable std::mutex m_OriginsMutex; time_t m_LastAccessed; @@ -328,12 +329,14 @@ public: void sortOrigins(); private: + using FileMap = std::map; + mutable std::mutex m_Mutex; - std::map m_Files; + FileMap m_Files; boost::shared_ptr m_OriginConnection; - FileEntry::Index generateIndex(); void unregisterFile(FileEntry::Ptr file); + FileEntry::Index generateIndex(); }; @@ -354,7 +357,7 @@ struct DirectoryEntryFileKey return std::hash()(value); } - const std::wstring value; + std::wstring value; const std::size_t hash; }; @@ -405,7 +408,7 @@ public: // That origin may exist or not void addFromOrigin( const std::wstring &originName, - const std::wstring &directory, int priority); + const std::wstring &directory, int priority, DirectoryStats& stats); void addFromBSA( const std::wstring &originName, std::wstring &directory, @@ -559,14 +562,14 @@ private: FileEntry::Ptr insert( std::wstring_view fileName, FilesOrigin &origin, FILETIME fileTime, - std::wstring_view archive, int order); + std::wstring_view archive, int order, DirectoryStats& stats); FileEntry::Ptr insert( env::File& file, FilesOrigin &origin, std::wstring_view archive, int order, DirectoryStats& stats); void addFiles( - FilesOrigin &origin, wchar_t *buffer, int bufferOffset); + FilesOrigin &origin, const std::wstring& path, DirectoryStats& stats); void addFiles( FilesOrigin &origin, BSA::Folder::Ptr archiveFolder, FILETIME &fileTime, @@ -575,7 +578,8 @@ private: void addDir(FilesOrigin& origin, env::Directory& d, DirectoryStats& stats); DirectoryEntry* getSubDirectory( - std::wstring_view name, bool create, int originID = -1); + std::wstring_view name, bool create, DirectoryStats& stats, + int originID = -1); DirectoryEntry* getSubDirectory( env::Directory& dir, bool create, DirectoryStats& stats, -- cgit v1.3.1