Gist is we paused the CoreThread without resuming it (input recording would wait until the next VSync), the shutdown routine triggers it when all required window elements are already cleaned up, hence the crash.
Reproduction Steps:
- boot game so gs window is open
- open the dialog for a new input recording, then close it
- close the GS window
- re-open the dialog for a new input recording, then close it
- close pcsx2, should error.
* No longer calls HandleFrameAdvanceAndPausing() more than once per frame. No need to increment frameCountTracker.
* Splits framelocking into its own function (which could harmlessly get called more than once per frame).
I believe the intention of the cheats/settings reloading is for the conventional pause/resume from the MainFrame's menu.
However, with input recording, nothing ever actually gets closed so I doubt the settings need to be reloaded. This stops that from happening on every individual frame advance. However, in case im wrong and it is needed, they do get re-applied when emulation is fully resumed (Shift+P by default). This just dramatically reduces the console spam.
* RecordingReset is now a function of the InputRecording class
* TotalFrames is now signed
* InputRecordingControls refactor, IsRecordingPaused -> IsPaused
* Add check to keep frameCounter from overflowing (not like someone is gonna record a year's worth of inputs though).
* Code Formatting adjustments (more to do in a separate PR)
Ensures that no frames of input are skipped over on the initial load of a recording file or during a fast/full boot when a recording file is active. Improved consistency.
* Recording mode enum, NoneActive -> NotActive
* Changed IsMode method names and added an IsRecording method.
* Add methods designated to setting a recording to a certain mode.
Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
* RecordingControls - > InputRecordingControls (+ function refactors & simplifications)
* Avoid mutating g_FrameCount - now use isolated frameCounter & startingFrame variables for input recordings
* Pause or resume emulation preemptively based on GUI actions
* Exclusively handle GS window title updates in FrameForGS