mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Core, VideoCommon: Fix crash at shutdown due to destructor ordering
Previously, PerformanceTracker registered a callback to be updated on emulation state changes. PerformanceTrackers live in a global variable (g_perf_metrics) within libvideocommon. The callback was stored in a global variable in libcore. This created a race condition at shutdown between these libraries, when the PerfTracker's destructor tried to unregister the callback. Notify the PerfTracker directly from libcore, without callbacks, since Core.cpp already references g_perf_metrics explicitly. Also rename Core::CallOnStateChangedCallbacks to NotifyStateChanged to better reflect what it's doing.
This commit is contained in:
@ -16,7 +16,7 @@ class PerformanceTracker
|
||||
public:
|
||||
PerformanceTracker(const std::optional<std::string> log_name = std::nullopt,
|
||||
const std::optional<DT> sample_window_duration = std::nullopt);
|
||||
~PerformanceTracker();
|
||||
~PerformanceTracker() = default;
|
||||
|
||||
PerformanceTracker(const PerformanceTracker&) = delete;
|
||||
PerformanceTracker& operator=(const PerformanceTracker&) = delete;
|
||||
@ -39,6 +39,7 @@ public:
|
||||
DT GetDtAvg() const;
|
||||
DT GetDtStd() const;
|
||||
DT GetLastRawDt() const;
|
||||
void InvalidateLastTime();
|
||||
|
||||
private:
|
||||
void LogRenderTimeToFile(DT val);
|
||||
@ -47,8 +48,6 @@ private:
|
||||
void PushFront(DT value);
|
||||
void PopBack();
|
||||
|
||||
int m_on_state_changed_handle;
|
||||
|
||||
// Name of log file and file stream
|
||||
std::optional<std::string> m_log_name;
|
||||
std::ofstream m_bench_file;
|
||||
|
Reference in New Issue
Block a user