From 80d7df910987db5201402fe987124f29f09344f3 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 25 Jul 2023 17:42:36 +1000 Subject: fuck off --- src/database/include/tag_parser.hpp | 2 ++ src/database/tag_parser.cpp | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) (limited to 'src/database') diff --git a/src/database/include/tag_parser.hpp b/src/database/include/tag_parser.hpp index b0e9a151..dcc8aa21 100644 --- a/src/database/include/tag_parser.hpp +++ b/src/database/include/tag_parser.hpp @@ -26,6 +26,8 @@ class TagParserImpl : public ITagParser { -> bool override; private: + std::mutex cache_mutex_; + /* * Cache of tags that have already been extracted from files. Ideally this * cache should be slightly larger than any page sizes in the UI. diff --git a/src/database/tag_parser.cpp b/src/database/tag_parser.cpp index 06d8a8c9..f7e1ceec 100644 --- a/src/database/tag_parser.cpp +++ b/src/database/tag_parser.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace database { @@ -97,10 +98,13 @@ static const char* kTag = "TAGS"; auto TagParserImpl::ReadAndParseTags(const std::string& path, TrackTags* out) -> bool { - std::optional cached = cache_.Get(path); - if (cached) { - *out = *cached; - return true; + { + std::lock_guard lock{cache_mutex_}; + std::optional cached = cache_.Get(path); + if (cached) { + *out = *cached; + return true; + } } if (path.ends_with(".m4a")) { @@ -166,7 +170,10 @@ auto TagParserImpl::ReadAndParseTags(const std::string& path, TrackTags* out) out->duration = ctx.duration; } - cache_.Put(path, *out); + { + std::lock_guard lock{cache_mutex_}; + cache_.Put(path, *out); + } return true; } -- cgit v1.2.3