From e000aaaf5d904abe6691751d7319d2aca90ff922 Mon Sep 17 00:00:00 2001 From: comex Date: Mon, 13 Apr 2015 01:49:24 -0400 Subject: Have the UI thread do PauseAndLock before messing with GetUsbPointer. Since its lifetime is managed on the CPU thread, this (or a refactoring) is absolutely required. One of the functions with a PauseAndLock call added is CFrame::UpdateGUI; this is fine now, since it's called only after important events happen, so just make sure not to call it every frame or something :) --- Source/Core/DolphinWX/FrameTools.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Source/Core/DolphinWX/FrameTools.cpp') diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp index de41814259..4edb08980f 100644 --- a/Source/Core/DolphinWX/FrameTools.cpp +++ b/Source/Core/DolphinWX/FrameTools.cpp @@ -1584,17 +1584,21 @@ void CFrame::ConnectWiimote(int wm_idx, bool connect) { if (Core::IsRunning() && SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) { + bool was_unpaused = Core::PauseAndLock(true); GetUsbPointer()->AccessWiiMote(wm_idx | 0x100)->Activate(connect); wxString msg(wxString::Format(_("Wiimote %i %s"), wm_idx + 1, connect ? _("Connected") : _("Disconnected"))); Core::DisplayMessage(WxStrToStr(msg), 3000); Host_UpdateMainFrame(); + Core::PauseAndLock(false, was_unpaused); } } void CFrame::OnConnectWiimote(wxCommandEvent& event) { + bool was_unpaused = Core::PauseAndLock(true); ConnectWiimote(event.GetId() - IDM_CONNECT_WIIMOTE1, !GetUsbPointer()->AccessWiiMote((event.GetId() - IDM_CONNECT_WIIMOTE1) | 0x100)->IsConnected()); + Core::PauseAndLock(false, was_unpaused); } // Toggle fullscreen. In Windows the fullscreen mode is accomplished by expanding the m_Panel to cover @@ -1792,6 +1796,7 @@ void CFrame::UpdateGUI() GetMenuBar()->FindItem(IDM_CONNECT_BALANCEBOARD)->Enable(RunningWii); if (RunningWii) { + bool was_unpaused = Core::PauseAndLock(true); GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1)->Check(GetUsbPointer()-> AccessWiiMote(0x0100)->IsConnected()); GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE2)->Check(GetUsbPointer()-> @@ -1802,6 +1807,7 @@ void CFrame::UpdateGUI() AccessWiiMote(0x0103)->IsConnected()); GetMenuBar()->FindItem(IDM_CONNECT_BALANCEBOARD)->Check(GetUsbPointer()-> AccessWiiMote(0x0104)->IsConnected()); + Core::PauseAndLock(false, was_unpaused); } if (m_ToolBar) -- cgit v1.2.3