Core: Reset Wiimotes/rumble/memwatcher on emu thread #8518
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
This was causing a race which was crashing the FifoCI runners. The main thread called Stop() which in turn called ResetAllWiimotes() while the emu thread was still exiting, also shutting down the Wiimote class.
By shifting the reset to the emu thread, all cleanup operations happen on the same thread where they were initialized.
The whole startup/shutdown situation is not an ideal design anyway (e.g. the
join()inStart()...). But at least this fixes the "random" crashes.I'd make
Stop()simply block until the emu thread shuts down, but if any part of the shutdown requires window messages to be pumped, asStop()is called from the UI thread it'll deadlock. So probably requires some more thinking.