diff options
| author | 2021-11-28 13:47:40 +0100 | |
|---|---|---|
| committer | 2022-06-28 01:10:55 +0200 | |
| commit | 38e4a144a1e6f399482eb586c1e0d5646fae9679 (patch) | |
| tree | 8079072946451c23e2a664f990234e6c76512297 | |
| parent | Core: Fix tests. (diff) | |
| download | yuzu-38e4a144a1e6f399482eb586c1e0d5646fae9679.tar.gz yuzu-38e4a144a1e6f399482eb586c1e0d5646fae9679.tar.xz yuzu-38e4a144a1e6f399482eb586c1e0d5646fae9679.zip | |
Core: Protect each event from race conditions within it.
Diffstat (limited to '')
| -rw-r--r-- | src/core/core_timing.cpp | 1 | ||||
| -rw-r--r-- | src/core/core_timing.h | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index b6c295ada..18dfa07f5 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp | |||
| @@ -226,6 +226,7 @@ std::optional<s64> CoreTiming::Advance() { | |||
| 226 | event_mutex.unlock(); | 226 | event_mutex.unlock(); |
| 227 | 227 | ||
| 228 | if (const auto event_type{evt.type.lock()}) { | 228 | if (const auto event_type{evt.type.lock()}) { |
| 229 | std::unique_lock<std::mutex> lk(event_type->guard); | ||
| 229 | event_type->callback(evt.user_data, std::chrono::nanoseconds{static_cast<s64>( | 230 | event_type->callback(evt.user_data, std::chrono::nanoseconds{static_cast<s64>( |
| 230 | GetGlobalTimeNs().count() - evt.time)}); | 231 | GetGlobalTimeNs().count() - evt.time)}); |
| 231 | } | 232 | } |
diff --git a/src/core/core_timing.h b/src/core/core_timing.h index 901bf532e..4fef6fcce 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h | |||
| @@ -32,6 +32,7 @@ struct EventType { | |||
| 32 | TimedCallback callback; | 32 | TimedCallback callback; |
| 33 | /// A pointer to the name of the event. | 33 | /// A pointer to the name of the event. |
| 34 | const std::string name; | 34 | const std::string name; |
| 35 | mutable std::mutex guard; | ||
| 35 | }; | 36 | }; |
| 36 | 37 | ||
| 37 | /** | 38 | /** |