summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VideoConfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/VideoConfig.cpp')
-rw-r--r--Source/Core/VideoCommon/VideoConfig.cpp7
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;
}