Project

General

Profile

Actions

Emulator Issues #12253

closed

Deadlock when turning off Wii Remote when using Connect Wii Remotes for Emulated Controllers

Added by JosJuice over 3 years ago. Updated over 3 years ago.

Status:
Fixed
Priority:
Normal
Assignee:
% Done:

0%

Operating system:
N/A
Issue type:
Bug
Milestone:
Regression:
No
Relates to usability:
No
Relates to performance:
No
Easy:
No
Relates to maintainability:
No
Regression start:
Fixed in:
5.0-13231

Description

Game Name?

I used Rodea the Sky Soldier (SROKZ5), but any Wii game should work

MD5 Hash? (right click the game in the game list, Properties, Verify tab, Verify Integrity button)

bff9c09ff4487ee0827252c8bf597527

What's the problem? Describe what went wrong.

If you turn off a Wii Remote while Connect Wii Remotes for Emulated Controllers is enabled and a game is running, the game freezes. (Dolphin's UI will subsequently also freeze if you try to do anything that locks the core, such as exiting emulation.)

What steps will reproduce the problem?

  1. Turn on Connect Wii Remotes for Emulated Controllers and set up an Emulated Wii Remote. (I used the default mapping you get in a blank Dolphin install.)
  2. Connect a Wii Remote to Dolphin.
  3. Launch any Wii game.
  4. While the game is running, turn off the Wii Remote by holding down its power button.

Is the issue present in the latest development version? For future reference, please also write down the version number of the latest development version.

Yes, 5.0-12579.

Is the issue present in the latest stable version?

No, because it does not have the Connect Wii Remotes for Emulated Controllers feature.

If the issue isn't present in the latest stable version, which is the first broken version? (You can find the first broken version by bisecting. Windows users can use the tool https://forums.dolphin-emu.org/Thread-green-notice-development-thread-unofficial-dolphin-bisection-tool-for-finding-broken-builds and anyone who is building Dolphin on their own can use git bisect.)

JMC bisected it to the version that added Connect Wii Remotes for Emulated Controllers.

What are your PC specifications? (CPU, GPU, Operating System, more)

Windows 10

Is there anything else that can help developers narrow down the issue? (e.g. logs, screenshots,
configuration files, savefiles, savestates)

Below are stack traces of the two threads that are mutually deadlocked.

ciface::Win32 message loop:

[External Code]	
[Inline Frame] Dolphin.exe!std::_Mutex_base::lock() Line 51	C++
[Inline Frame] Dolphin.exe!std::lock_guard<std::recursive_mutex>::{ctor}(std::recursive_mutex &) Line 436	C++
Dolphin.exe!ciface::Core::DeviceContainer::FindDevice(const ciface::Core::DeviceQualifier & devq) Line 183	C++
Dolphin.exe!ciface::ExpressionParser::ControlEnvironment::FindOutput(ciface::ExpressionParser::ControlQualifier qualifier) Line 426	C++
Dolphin.exe!ciface::ExpressionParser::ControlExpression::UpdateReferences(ciface::ExpressionParser::ControlEnvironment & env) Line 222	C++
Dolphin.exe!ControllerEmu::EmulatedController::UpdateReferences(ciface::ExpressionParser::ControlEnvironment & env) Line 55	C++
Dolphin.exe!ControllerEmu::EmulatedController::UpdateReferences(const ControllerInterface & devi) Line 47	C++
[External Code]	
[Inline Frame] Dolphin.exe!std::_Func_class<void>::operator()() Line 976	C++
Dolphin.exe!ControllerInterface::InvokeDevicesChangedCallbacks() Line 301	C++
Dolphin.exe!ControllerInterface::RemoveDevice(std::function<bool __cdecl(ciface::Core::Device const *)> callback) Line 249	C++
Dolphin.exe!ciface::DInput::PopulateDevices(HWND__ * hwnd) Line 58	C++
Dolphin.exe!WindowProc(HWND__ * hwnd, unsigned int message, unsigned __int64 wparam, __int64 lparam) Line 32	C++
[External Code]	
Dolphin.exe!`ciface::Win32::Init'::`2'::<lambda_1>::operator()() Line 113	C++
[External Code]	

CPU thread:

[External Code]	
[Inline Frame] Dolphin.exe!std::_Mutex_base::lock() Line 51	C++
[Inline Frame] Dolphin.exe!std::lock_guard<std::mutex>::{ctor}(std::mutex &) Line 436	C++
Dolphin.exe!ControllerInterface::InvokeDevicesChangedCallbacks() Line 300	C++
Dolphin.exe!ControllerInterface::RemoveDevice(std::function<bool __cdecl(ciface::Core::Device const *)> callback) Line 249	C++
Dolphin.exe!ciface::Wiimote::Device::UpdateInput() Line 1374	C++
Dolphin.exe!ControllerInterface::UpdateInput() Line 259	C++
Dolphin.exe!SerialInterface::UpdateDevices() Line 659	C++
Dolphin.exe!VideoInterface::Update(unsigned __int64 ticks) Line 870	C++
Dolphin.exe!SystemTimers::`anonymous namespace'::VICallback(unsigned __int64 userdata, __int64 cyclesLate) Line 136	C++
Dolphin.exe!CoreTiming::Advance() Line 327	C++
[External Code]	
Actions #1

Updated by Anonymous over 3 years ago

the problematic locks are:
ciface thread holds m_callbacks_mutex while cpu thread waits for it
cpu thread holds m_devices_mutex while ciface thread waits for it

Actions #2

Updated by Billiard26 over 3 years ago

  • Assignee set to Billiard26
Actions #3

Updated by JosJuice over 3 years ago

  • Status changed from Accepted to Fix pending
Actions #4

Updated by leoetlino over 3 years ago

  • Status changed from Fix pending to Fixed
  • Fixed in set to 5.0-13231
Actions

Also available in: Atom PDF