diff options
Diffstat (limited to 'Source/Core/VideoCommon/VideoConfig.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/VideoConfig.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp index d4097e5669..f561f94d37 100644 --- a/Source/Core/VideoCommon/VideoConfig.cpp +++ b/Source/Core/VideoCommon/VideoConfig.cpp @@ -48,7 +48,12 @@ void VideoConfig::Refresh() { if (!s_has_registered_callback) { - Config::AddConfigChangedCallback([]() { g_Config.Refresh(); }); + // There was a race condition between the video thread and the host thread here, if + // corrections need to be made by VerifyValidity(). Briefly, the config will contain + // invalid values. Instead, pause emulation first, which will flush the video thread, + // update the config and correct it, then resume emulation, after which the video + // thread will detect the config has changed and act accordingly. + Config::AddConfigChangedCallback([]() { Core::RunAsCPUThread([]() { g_Config.Refresh(); }); }); s_has_registered_callback = true; } |
