mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-21 18:39:57 +00:00
Qt: Fix data race and undefined behaviour in games_config
This commit is contained in:
parent
cd9ff08235
commit
eb5ea82bb1
@ -19,6 +19,12 @@ games_config::~games_config()
|
||||
}
|
||||
}
|
||||
|
||||
const std::map<std::string, std::string> games_config::get_games() const
|
||||
{
|
||||
std::lock_guard lock(m_mutex);
|
||||
return m_games;
|
||||
}
|
||||
|
||||
std::string games_config::get_path(const std::string& title_id) const
|
||||
{
|
||||
if (title_id.empty())
|
||||
@ -26,6 +32,8 @@ std::string games_config::get_path(const std::string& title_id) const
|
||||
return {};
|
||||
}
|
||||
|
||||
std::lock_guard lock(m_mutex);
|
||||
|
||||
if (const auto it = m_games.find(title_id); it != m_games.cend())
|
||||
{
|
||||
return it->second;
|
||||
@ -36,6 +44,8 @@ std::string games_config::get_path(const std::string& title_id) const
|
||||
|
||||
bool games_config::add_game(const std::string& key, const std::string& path)
|
||||
{
|
||||
std::lock_guard lock(m_mutex);
|
||||
|
||||
// Access or create node if does not exist
|
||||
if (auto it = m_games.find(key); it != m_games.end())
|
||||
{
|
||||
@ -64,6 +74,8 @@ bool games_config::add_game(const std::string& key, const std::string& path)
|
||||
|
||||
bool games_config::save()
|
||||
{
|
||||
std::lock_guard lock(m_mutex);
|
||||
|
||||
YAML::Emitter out;
|
||||
out << m_games;
|
||||
|
||||
@ -81,6 +93,8 @@ bool games_config::save()
|
||||
|
||||
void games_config::load()
|
||||
{
|
||||
std::lock_guard lock(m_mutex);
|
||||
|
||||
m_games.clear();
|
||||
|
||||
if (fs::file f{fs::get_config_dir() + "/games.yml", fs::read + fs::create})
|
||||
|
@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "Utilities/mutex.h"
|
||||
#include <map>
|
||||
|
||||
class games_config
|
||||
@ -10,7 +11,7 @@ public:
|
||||
|
||||
void set_save_on_dirty(bool enabled) { m_save_on_dirty = enabled; }
|
||||
|
||||
const std::map<std::string, std::string>& get_games() const { return m_games; }
|
||||
const std::map<std::string, std::string> get_games() const;
|
||||
bool is_dirty() const { return m_dirty; }
|
||||
|
||||
std::string get_path(const std::string& title_id) const;
|
||||
@ -22,6 +23,7 @@ private:
|
||||
void load();
|
||||
|
||||
std::map<std::string, std::string> m_games;
|
||||
mutable shared_mutex m_mutex;
|
||||
|
||||
bool m_dirty = false;
|
||||
bool m_save_on_dirty = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user