diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-07-25 17:42:36 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-07-25 17:43:12 +1000 |
| commit | 80d7df910987db5201402fe987124f29f09344f3 (patch) | |
| tree | 7e8c1e04ab40026087343efee95a771c7839b32f /src/database | |
| parent | 7b72e5479ee6d11f76c49f7463ba0e7f4e5165c5 (diff) | |
| download | tangara-fw-80d7df910987db5201402fe987124f29f09344f3.tar.gz | |
fuck off
Diffstat (limited to 'src/database')
| -rw-r--r-- | src/database/include/tag_parser.hpp | 2 | ||||
| -rw-r--r-- | src/database/tag_parser.cpp | 17 |
2 files changed, 14 insertions, 5 deletions
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 <tags.h> #include <cstdlib> #include <iomanip> +#include <mutex> namespace database { @@ -97,10 +98,13 @@ static const char* kTag = "TAGS"; auto TagParserImpl::ReadAndParseTags(const std::string& path, TrackTags* out) -> bool { - std::optional<TrackTags> cached = cache_.Get(path); - if (cached) { - *out = *cached; - return true; + { + std::lock_guard<std::mutex> lock{cache_mutex_}; + std::optional<TrackTags> 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<std::mutex> lock{cache_mutex_}; + cache_.Put(path, *out); + } return true; } |
