mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 22:29:39 -06:00
Don't fill backend info when core is running
The current approach results in the UI thread creating a graphics device whilst the core is running, leading to races on function pointers, and potentially crashing.
This commit is contained in:
@ -14,6 +14,8 @@
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/Event.h"
|
||||
#include "Common/Logging/Log.h"
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
#include "Core/Host.h"
|
||||
|
||||
// TODO: ugly
|
||||
@ -223,6 +225,20 @@ void VideoBackendBase::ActivateBackend(const std::string& name)
|
||||
g_video_backend = iter->get();
|
||||
}
|
||||
|
||||
void VideoBackendBase::PopulateBackendInfo()
|
||||
{
|
||||
// If the core is running, the backend info will have been populated already.
|
||||
// If we did it here, the UI thread can race with the with the GPU thread.
|
||||
if (Core::IsRunning())
|
||||
return;
|
||||
|
||||
// We refresh the config after initializing the backend info, as system-specific settings
|
||||
// such as anti-aliasing, or the selected adapter may be invalid, and should be checked.
|
||||
ActivateBackend(SConfig::GetInstance().m_strVideoBackend);
|
||||
g_video_backend->InitBackendInfo();
|
||||
g_Config.Refresh();
|
||||
}
|
||||
|
||||
// Run from the CPU thread
|
||||
void VideoBackendBase::DoState(PointerWrap& p)
|
||||
{
|
||||
|
Reference in New Issue
Block a user